1) В вашем конкретном случае я бы упростил
val myActor: Actor = actor {
caller ! projectConfig.instantiate
}
до caller ! projectConfig.instantiate
.Вы уже делаете вызов из подсистемы актера, поэтому дополнительная упаковка не требуется.
Кроме того, хотя обычно рекомендуется вызывать актеров из среды актеров (порождение вызова), это вовсе не "необходимость" (и никакого зла не случится, если вы вызовете актера непосредственно в env, не являющемся актером).В вашем случае упаковка вызовов скорее добавляет проблем (шаблон и несоответствия).
2) На самом деле в actor ! exit
происходит actor ! Actor.exit
( при условии, что в Actor
имеется импорт с подстановочными знаками).Этот код вызывает исключение при попытке оценить Actor.exit
, и актеру ничего не отправляется.Чтобы остановить актера, вы должны вызвать exit
в его экземпляре.Это можно сделать через отправку сообщения, которое вызовет защищенный exit
:
actor{
loop{
react{
case `exit => exit('stop)
}
}
}