Scala:如何在var中"存储"一个函数?

Dam*_*ian 7 scala anonymous-function

我正在学习Scala,我正在尝试将函数存储在var中以便稍后对其进行评估:

var action:() => Any = () => {}
def setAction(act: => Any) {
    action = act 
}
Run Code Online (Sandbox Code Playgroud)

但那不编译:

错误:类型不匹配;
发现:任何
要求:()=>任何
行动=行为

所以在我看来,它action = act不是分配函数,而是评估它并分配结果.
我不知道如何在不评估的情况下分配函数.

谢谢!

Wal*_*ang 15

注意类型"()=>任何"与by-name参数不同"=>任何".键入"()=>任何"是一个不带参数并返回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
Run Code Online (Sandbox Code Playgroud)