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)