为什么以下测试在Scala中返回false?

del*_*ber 0 scala

以下两个打印都是假的.所需的行为是第一个打印为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;


Lui*_*hys 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
Run Code Online (Sandbox Code Playgroud)