以下两个打印都是假的.所需的行为是第一个打印为true,第二个打印为false.我不确定为什么总是会被打印出来.
def myTest(filter: => Boolean) = () => {
if (filter) {
// do something here
true
}
false
}
println(myTest(5 > 3)())
println(myTest(5 > 7)())
Run Code Online (Sandbox Code Playgroud)
huy*_*hjl 14
这个表达式:
if (filter) {
true
}
Run Code Online (Sandbox Code Playgroud)
是一个表达式,当filter计算结果为true 时返回true,()否则返回Unit .
这个块:
{
expr;
false
}
Run Code Online (Sandbox Code Playgroud)
是一个评估expr,丢弃它,然后返回false的块.
所以:
{
if (filter) {
true
}
false
}
Run Code Online (Sandbox Code Playgroud)
总是回来false.想想if (filter) { true }就好expr;
huynhjl给出了句法原因.现象学的原因是你忘记了else之前的false.
scala> def myTest(filter: => Boolean) = () => {
|
| if (filter) {
| // do something here
| true
| }
| else false
| }
myTest: (filter: => Boolean)() => Boolean
scala> println(myTest(5 > 3)())
true
scala> println(myTest(5 > 7)())
false
Run Code Online (Sandbox Code Playgroud)