Scala:如何“存储” var中的函数?
-
05-07-2019 - |
题
我正在学习Scala,我正在尝试将函数存储在var中以便稍后对其进行评估:
var action:() => Any = () => {}
def setAction(act: => Any) {
action = act
}
但是没有编译:
错误:类型不匹配;
发现:任何
必需:()=>任何结果 action = act
所以在我看来,在 action = act
而不是分配函数时,它正在评估它并分配结果。
我无法在不进行评估的情况下找出如何分配函数。
谢谢!
解决方案
注意类型"()=>任何"与名称参数“=>不同任何&QUOT ;.输入“()=>任何"是一个不带参数并返回Any的函数,而by-name参数“=>任何"延迟执行参数直到它被使用并返回Any。
所以你需要做的是以下内容:
var action: () => Any = null
def setAction(act: => Any) = action = () => act
setAction(println("hello")) // does not print anything
action() // prints "hello"
setAction(123)
action() // returns 123
其他提示
我认为你的参数声明是错误的。如果您只是想在var中存储函数以供以后使用,那么这可能是您想要的:
def setAction(act:() => Any) {
action = act
}
然后:
scala> def p() { println("hi!") }
p: ()Unit
scala> setAction(p)
scala> action()
hi!
res2: Any = ()
不隶属于 StackOverflow