我在 Scala-IDE 中有以下代码:
type myF = () => Boolean
def acceptFunction(f: myF) {
//...
}
接着:
var a = false
def isA = () => a
但是当我尝试将它传递给acceptFunction时,它会导致错误:
acceptFunction(isA)
错误是:
类型不匹配; 发现 : () => 需要布尔值:布尔值
但为什么?
如果我isA
这样声明:
def isA() = () => a
然后它被接受,但我认为,它会因为括号而被评估。
有没有办法通过这样的功能进行进一步评估?
更新:
看起来它与Scala-IDE有关。REPL 对这些表达式没有任何问题。但是,我仍然无法使传递的函数不会变成闭包。我的意思是,它变成了闭包,然后更改var a
后者并println(f())
再次调用示例 - 不会更改值。所以,问题的第二部分仍然存在——有没有办法通过这样的函数进行进一步的评估?