Architecture 基于子消息划分主更新功能

Architecture 基于子消息划分主更新功能,architecture,message,elm,reducers,Architecture,Message,Elm,Reducers,我正在尝试将我的顶级邮件分离为子邮件,因此我做到了: type GeneratorMsg =生成的BOIDSD(列表Boid) |生成的颜色(列表颜色) 输入味精 =滴答声时间 |UpdateWorld窗口。大小 |发电机MSG 然而,在我的主更新函数中,当我使用BoidsGenerated消息时,Elm认为它属于GeneratorMsg类型,这是正确的。但同时,在我看来,它是Msg类型的 有没有一种方法可以互换处理Msg和GeneratorMsg?基本上,我想把我的更新函数拆分成更小的函数,

我正在尝试将我的顶级邮件分离为子邮件,因此我做到了:

type GeneratorMsg
=生成的BOIDSD(列表Boid)
|生成的颜色(列表颜色)
输入味精
=滴答声时间
|UpdateWorld窗口。大小
|发电机MSG
然而,在我的主更新函数中,当我使用BoidsGenerated消息时,Elm认为它属于GeneratorMsg类型,这是正确的。但同时,在我看来,它是Msg类型的


有没有一种方法可以互换处理Msg和GeneratorMsg?基本上,我想把我的更新函数拆分成更小的函数,但是我想所有与生成的东西有关的事情都由一个单独的函数来处理。然后,该函数将有BoidsGenerated和ColoursGenerated MSG的实例。--谢谢

你这里的是名字的冲突。您有一个名为
GeneratorMsg
的类型,以及一个名为
GeneratorMsg
的不同类型的构造函数(
Msg

按照您定义
Msg
GeneratorMsg
构造函数的方式,它是无参数的,不包含任何有效信息。您需要定义一个参数来携带
GeneratorMsg
值:

type Msg
=滴答声时间
|UpdateWorld窗口。大小
|GeneratorMsg GeneratorMsg
然后,您可以在一个单独的函数中处理更新,但您必须
Cmd.map
GeneratorMsg
包装成
Msg
值:

update:Msg->Model->(Model,Cmd-Msg)
更新msg模型=
味精案例
GeneratorMsg gmsg->
让
(gmodel,newMsg)=
更新发电机gmsg模型
在里面
(gmodel,Cmd.map GeneratorMsg newMsg)
_ ->
...
updateGenerator:GeneratorMsg->Model->(Model,Cmd GeneratorMsg)
更新发电机gmsg模型=
gmsg案件
boids生成的boids->
...
颜色生成的颜色->
...