5
我對Scala相當陌生。 我想了解當scala作爲消息的一部分傳遞給Actor時,如何進行動態綁定。與演員一起使用時的Scala變量綁定
我正在使用Akka 1.2和Scala 2.9。
我有以下代碼段(從http://gleichmann.wordpress.com/2010/11/15/functional-scala-closures/修改)
var minAge = 18
val isAdult = (age: Int) => age >= minAge
actor ! answer(19, isAdult)
minAge = 20
actor ! answer(19, isAdult)
關於演員側,它只是適用isAdult於第一參數和輸出結果。 由於斯卡拉使用動態綁定(所以有人告訴我),我本來期望
true
false
,但不知結果是
false
false
所以這是真的,Scala是靜態綁定變量,並採取18作爲兩個答覆消息的minAge的值?有沒有辦法在消息中使用閉包時保持動態綁定行爲?
謝謝!
這是正確的,但請記住永遠不要這麼做;-)嚴重的是,如果你想在它們之間共享可變狀態,你將不會使用演員。不幸的是,Scala沒有提供關閉「按價值」的方法,因此您唯一能做的就是手動確保您關閉的所有內容都是「val」。 –
我認爲這種說法在一臺機器上是正確的。但是對於遠程演員,爲什麼不呢?例如,我可以發送消息來同步兩個角色之間的分佈式狀態? – royalflush