私はElmに"compose" patternを使用しています。 Main.elm
でElmの親からウィジェットモデルを変更
、私は次のように使用してRandom
ための初期シードを生成しています:
type alias Model =
{ ...
, seed : Seed
}
initialModel : Model
initialModel =
{ ...
, seed = initialSeed 0
}
init : (Model, Cmd Msg)
init =
(initialModel, generate InitializeSeed (int minInt maxInt))
type Msg
= ...
| InitializeSeed Int
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
...
InitializeSeed value ->
({ model | seed = Random.initialSeed value }, Cmd.none)
ランダム開始値に乱数ジェネレータのシードを初期化するためにうまく動作するように思われます。
私は、メインアプリケーションで使用される「独立した」ウィジェットを持っています。 InitializeSeed
メッセージを受信したら、そのウィジェットにそのシードを渡してから、子ウィジェットで変更された値(Random.step
を使用)を取得して、ジェネレータが必要なときに他のウィジェットのシードを更新できるようにしたいと思います。
update
機能の子ウィジェットのメッセージをMain
に生成するにはどうすればよいですか?その子に子孫を渡すことはできますか?子は、更新されたシードをどのように元に戻すことができますか?
UPDATE:私はこれが最善の方法であることは確かではないよものの、子ウィジェットまでシードを渡す方法を考え出し
。
子コードは次のようになります。
type alias Model =
{ ...
, seed : Seed
}
replaceSeed : Model -> Seed -> Model
replaceSeed model seed =
{ model | seed = seed }
と親で、私はこのようなupdate
機能修正:私はまだ子供のリターンを持っている方法を探しています
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
...
InitializeSeed value ->
let
seed =
Random.initialSeed value
child_ =
Child.replaceSeed model.child seed
in
({ model
| seed = seed
, child = child_
}
, Cmd.none
)
を更新されたシード