Elm中能否无需逐个命名字段合并两个不同record为大record?
Elm 中能否不指定字段名直接合并多个记录生成新记录?
结论
无法原生实现你期望的效果。
具体说明
- Elm 自带的记录更新语法仅支持基于单个已有记录做字段覆写或新增,标准写法为
{ 原记录 | 字段名 = 新值 },你写的{a | b | g=5}属于非法语法,编译阶段就会直接报错。 - Elm 既不支持在更新语法里直接传入第二个记录做自动字段合并,也没有提供运行时遍历记录所有字段的反射能力,核心原因是这类隐式合并会破坏编译期的类型确定性:如果两个待合并记录存在同名字段,编译器没法自动判断该保留哪个值;同时无显式声明的字段合并也会让类型推断结果不可控,不符合Elm“无隐式行为、所有逻辑可在编译期完成校验”的设计原则。
可行写法
如果要得到同时包含a、b所有字段且新增g=5的记录c,你必须显式枚举所有字段完成赋值,示例代码如下:
a = {d = 4 , y = 5} b = {b = 4, n = 1} c = { d = a.d, y = a.y, b = b.b, n = b.n, g = 5 }
如果你需要频繁合并固定结构的记录,可以自己封装对应的合并函数,但函数内部依然需要逐字段完成取值赋值,不存在跳过字段枚举的通用合并方案。
内容的提问来源于stack exchange,提问作者storyfeet
相关产品推荐
相关产品推荐

