[英]Scala: How to “store” a function in a var?
我正在學習Scala,我正在嘗試將函數存儲在var中以便稍后對其進行評估:
var action:() => Any = () => {}
def setAction(act: => Any) {
action = act
}
但那不編譯:
錯誤:類型不匹配;
發現:任何
必需:()=>任何
action = act
因此在我看來,在action = act
而不是分配函數時,它正在評估它並分配結果。
我不知道如何在不評估的情況下分配函數。
謝謝!
注意類型“()=>任何”與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
我認為你的參數聲明是錯誤的。 如果您只是想將一個函數存儲在var中供以后使用,這可能就是您想要的:
def setAction(act:() => Any) {
action = act
}
然后:
scala> def p() { println("hi!") }
p: ()Unit
scala> setAction(p)
scala> action()
hi!
res2: Any = ()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.