elm - 使用多个构造函数更新 Elm 记录
问题描述
有没有办法修改具有多个构造函数的类型的字段?
type U = S | C { xxx : String }
This is not a record, so it has no fields to update!
5| let c = C { xxx = "DD"} in case c of C {} -> { c | xxx = "ZZ" }
^
This `c` value is a:
U
But I need a record!
解决方案
在type U = S | C { xxx : String }
中,xxx
不是 的域U
。它是 中包含的记录的一个字段C
。这些是可以解构为单独值的单独类型。这样做的方法是使用case
匹配C
构造函数并将包含的值绑定到一个名称(或进一步解构它),以便我们可以在->
.
但是你也需要处理存在的c
可能性S
。那应该退回什么?也许是默认值?或者,也许你真的想返回一个U
?我在这里假设前者,但后者只是U
你在其他任何地方的构造值。
let
c =
C { xxx = "DD" }
in
case c of
C record ->
{ record | xxx = "ZZ" }
S ->
-- What to do here?
{ xxx = "default?" }