2016-12-19 8 views
1

アッカドキュメントは小道具について、これを言う:別の内の一人の俳優を宣言小道具への参照を渡すと間違っていますか?

は非常に危険であり、休憩俳優 カプセル化。俳優のこのリファレンスを決して小道具に渡さないでください!

なぜsystem.actorOf(Props(new SellActor(100)),"new_actor")が悪いと思われるのですか?

私はAkka Actor Props factoryとこのarticleを通過しましたが、それでもが間違っていると理解できません。です。参照を渡しても、私のコードは正常に動作します。問題を示す小さなコード例を教えてください。

更新:回答から、私は俳優のライフサイクルとの関連性を理解しました。しかし、Actorオブジェクトに渡すパラメータがないとどうなりますか?例えば、

system.actorOf(Props(new SellActor()),"new_actor") 

も悪い考え方です。あるアクターオブジェクトを別のアクターオブジェクトの内部に作成すると、何が問題になりますか?

答えて

1

アクターが失敗して再起動する必要がある場合、アクターシステムはそれを行う方法を知る必要があります。 Props(new SellActor(100)を使用する場合は、パラメータ値100を自分で処理して非表示にしています。

場合は、代わりに、あなたが俳優のインスタンスを作成する方法を宣言し、俳優のシステムは、それが俳優を再作成時に行う必要が正確に何を知っている - すなわち100のコンストラクタ引数でSellActorのインスタンスを作成します。

パラメータを設定していない場合でも、重大な問題が発生する可能性があります。

// NOT RECOMMENDED within another actor: 
// encourages to close over enclosing class 
val props7 = Props(new MyActor) 

、非シリアライズ小道具およびおそらくレース条件(アクターのカプセル化を壊す)、その結果、封入範囲にわたって閉じるように奨励ので、この方法は、別のアクター内で使用することは推奨されない。documentationから。

+0

「クローズオーバー」とはどういう意味ですか? – codingsplash

関連する問題