我正在学习 Scala,我正在尝试将一个函数存储在一个 var 中以便稍后对其进行评估:
var action:() => Any = () => {}
def setAction(act: => Any) {
action = act
}
但这不会编译:
错误:类型不匹配;
找到:任何
必需的:() => 任何
操作 = 行动
所以在我看来,action = act
不是分配函数,而是评估它并分配结果。
我不知道如何在不评估它的情况下分配函数。
谢谢!
我正在学习 Scala,我正在尝试将一个函数存储在一个 var 中以便稍后对其进行评估:
var action:() => Any = () => {}
def setAction(act: => Any) {
action = act
}
但这不会编译:
错误:类型不匹配;
找到:任何
必需的:() => 任何
操作 = 行动
所以在我看来,action = act
不是分配函数,而是评估它并分配结果。
我不知道如何在不评估它的情况下分配函数。
谢谢!
注意类型“() => Any”与按名称参数“=> Any”不同。类型“() => Any”是一个不带参数并返回 Any 的函数,而名称参数“=> Any”会延迟参数的执行,直到它被使用并返回 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 = ()