我正在尝试将库从Elm 0.15迁移到0.16.记录扩展机制已被删除.
我的库提供了对物体的物理计算(表示为记录),并使用记录扩展来允许用户添加关于物体的标签和其他元数据.
我的示例代码通过在创建后为所有实体添加标签来显示此用法:
labeledBodies = map (\b -> { b | label = bodyLabel b.restitution b.inverseMass }) someBodies
Run Code Online (Sandbox Code Playgroud)
此标记实体列表也会传递给库:
main = Signal.map scene (run labeledBodies tick)
Run Code Online (Sandbox Code Playgroud)
什么样的工作:将meta参数硬编码为Body:
type alias Body a = {
pos: Vec2, -- reference position (center)
velocity: Vec2, -- direction and speed
inverseMass: Float, -- we usually use only inverse mass for calculations
restitution: Float, -- bounciness factor
shape: Shape,
meta: a
}
Run Code Online (Sandbox Code Playgroud)
但这会使API更加笨拙,因为它会强制辅助函数采用额外的参数.是否有更优雅的方式来应对这种变化?
如果该meta字段有类型怎么办Dict String String?那么你就不必做任何疯狂的笨拙的类型变量。Maybe String但是,您无法保证您传入的所有记录确实都有标签,因此您必须在这样做时使用 a Dict.get "label" r.meta。