簡體   English   中英

Scala:如何在var中“存儲”一個函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM