我真的被這種情況感到驚訝。有任何想法爲什麼會發生這種情況?阿卡演員的孩子的煩惱
我們,如果孩子是不存在的創建演員:
這個每次工作正常。 然後發送Ping消息。
這一段時間對演員的情況下掛斷已經存在:
child(name) getOrElse actorOf(PingActor.props, name) ! GetState
爲什麼?
我真的被這種情況感到驚訝。有任何想法爲什麼會發生這種情況?阿卡演員的孩子的煩惱
我們,如果孩子是不存在的創建演員:
這個每次工作正常。 然後發送Ping消息。
這一段時間對演員的情況下掛斷已經存在:
child(name) getOrElse actorOf(PingActor.props, name) ! GetState
爲什麼?
簡短的回答
由於運算符優先級的,只有當child(name)
返回None
,即getOrElse
調用你的消息被髮送。
使用非綴方法調用,以避免這種情況:
child(name).getOrElse(actorOf(PingActor.props, name)) ! GetState
龍答案
按Scala language specification,在斯卡拉通常綴操作是左結合,並從左至右進行評估。如果是這種情況,你的代碼就可以正常工作。
然而也存在操作者的優先級規則,其允許在沒有括號通常的數學和邏輯操作。據他們說,操作者!
具有比getOrElse
更高的優先級,並在它之前評估,從而從「內部」發送消息。
非常感謝! – HoTicE
'掛up' ......你的意思是凍結? –
是,冷凍時發送消息 – HoTicE
你怎麼知道在發送消息時,它凍結,而不是調用'getOrElse'什麼時候? –