Elm中为含Maybe Int类型的记录赋Int值报错原因及正确赋值方法
报错原因
核心问题和数字字面量被识别为number类型没有直接关系,本质是没有遵守Maybe Int的类型规则:
- Elm中
Maybe a是专门用来表示「值可能缺失」的枚举类型,只有两个合法值:Just a(包裹对应类型的有效值)、Nothing(表示值不存在) - 你定义的
User类型中,age字段明确要求类型为Maybe Int,不管是用记录构造函数还是直接写字段赋值,直接传入裸的数字24属于类型完全不匹配——你传的是数字,字段要求的是Maybe类型的值,自然会触发类型错误。
报错信息里提到的number类型,只是Elm对未加明确约束的数字字面量的默认泛型推断,编译器在检查类型时还没等到给这个数字确定是Int还是Float,就先发现传入值的种类和要求的Maybe类型对不上,所以把这个泛型状态写在了报错里。
正确赋值方法
根据年龄是否已知,用对应的Maybe值包裹即可,两种赋值写法都可以正常通过类型检查:
type alias User = { name : String, age : Maybe Int } -- 写法1:使用记录构造函数 -- 已知年龄时,用Just包裹整数值 userWithKnownAge = User "Kyxey" (Just 24) -- 年龄未知/未填写时,传入Nothing userWithUnknownAge = User "Kyxey" Nothing -- 写法2:直接编写记录字面量 userWithKnownAge2 : User userWithKnownAge2 = { name = "Kyxey", age = Just 24 } userWithUnknownAge2 : User userWithUnknownAge2 = { name = "Kyxey", age = Nothing }
内容的提问来源于stack exchange,提问作者KYXEY
相关产品推荐
相关产品推荐

