一定の有限期間の後に受信タイムアウトをスケジュールするAkkaアクタと混合できる特性を定義したいと思います。ここで私は何をしたいのスケッチ...mixin内のAkka Actorコンテキストへのアクセス
trait BidderInActivityClearingSchedule[T <: Tradable, A <: Auction[T, A]]
extends ClearingSchedule[T, A] {
this: AuctionActor[T, A] =>
context.setReceiveTimeout(timeout) // can I call this here?
def timeout: FiniteDuration
override def receive: Receive = {
case ReceiveTimeout =>
val (clearedAuction, contracts) = auction.clear
contracts.foreach(contract => settlementService ! contract)
auction = clearedAuction
case message => this.receive(message)
}
}
class FancyAuctionActor[T <: Tradable](val timeout: FiniteDuration, ...)
extends AuctionActor[T, FancyAuctionActor[T]]
with BidderInActivityClearingSchedule[T, FancyAuctionActor[T]]
がある...しかしcontext.setReceiveTimeout
が呼び出されるとき、私は理解していません。 MyFancyAuctionActor
が呼び出されたときにコンストラクタの一部として呼び出されますか?または、それはより早く呼び出されるので、timeout
が定義されていないという事実のために何らかのエラーが発生します。
俳優のライフサイクルフックを使用するのは悪い考えではありませんが、私はActorを拡張したくありません。私はその特性をmixinとして保持したいと思います。 – davidrpugh
私がスタッキング可能なミックスインに対する最良の実践的アプローチを知っている限り、すべてのミックスインがベース特性を伸ばしているということです。自分のタイプの注釈だけを持つことで、同じ方法を実際にやっていることになります。スタック可能なミックスインを実装するもう一つのやり方があります。答えは – shayan
です。私はスタック可能なアクターのパターンに精通しており、ライブラリでそれを使用しています。多分私はペタンティックであると思うかもしれませんが、私はActorからミックスインが明らかになっているという特徴を持つのが好きではありません。 – davidrpugh