2017-08-24 370 views
0

我真的被這種情況感到驚訝。有任何想法爲什麼會發生這種情況?阿卡演員的孩子的煩惱

​​

我們,如果孩子是不存在的創建演員:

這個每次工作正常。 然後發送Ping消息。

這一段時間對演員的情況下掛斷已經存在:

child(name) getOrElse actorOf(PingActor.props, name) ! GetState 

爲什麼?

+0

'掛up' ......你的意思是凍結? –

+0

是,冷凍時發送消息 – HoTicE

+0

你怎麼知道在發送消息時,它凍結,而不是調用'getOrElse'什麼時候? –

回答

2

簡短的回答

由於運算符優先級的,只有當child(name)返回None,即getOrElse調用你的消息被髮送。

使用非綴方法調用,以避免這種情況:

child(name).getOrElse(actorOf(PingActor.props, name)) ! GetState 

龍答案

Scala language specification,在斯卡拉通常綴操作是左結合,並從左至右進行評估。如果是這種情況,你的代碼就可以正常工作。

然而也存在操作者的優先級規則,其允許在沒有括號通常的數學和邏輯操作。據他們說,操作者!具有比getOrElse更高的優先級,並在它之前評估,從而從「內部」發送消息。

+0

非常感謝! – HoTicE