以下两个都打印错误。所需的行为是第一个打印为true,第二个打印为false。我不确定为什么总是被打印出来。
def myTest(filter: => Boolean) = () => {
if (filter) {
// do something here
true
}
false
}
println(myTest(5 > 3)())
println(myTest(5 > 7)())
答案 0 :(得分:14)
这个表达式:
if (filter) {
true
}
是一个表达式,当filter
计算结果为true时返回true,否则返回单位()
。
这个区块:
{
expr;
false
}
是一个评估expr
的块,丢弃它,然后返回false。
所以:
{
if (filter) {
true
}
false
}
始终返回false
。想象if (filter) { true }
,如expr;
答案 1 :(得分:5)
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
答案 2 :(得分:2)
最后一个语句是false,所以它返回false,你需要if表达式中的else来有条件地执行该语句。
只是想指出你的filter参数已经解析了一个布尔值,所以if表达式完全是多余的,你的构造可以简单地重写为:
def myTest(filter: => Boolean) = () => filter
可能导致进一步的存在问题。