如何将字符串记录转换为elm中的浮点数
我有用户提供的记录:
type alias Model =
{ age : String,
weight : String,
height : String,
appetite : String
}
我想将其转换为数字:
type alias FloatModel =
{ age : Float,
weight : Float,
height : Float,
appetite : Float
}
我的挣扎是,如果用户输入了错误的数据,这String.toFloat可能会回来Nothing。所以我想我想要一个Maybe FloatModel处理坏数据。我如何调用String.toFloat每个成员,如果他们都成功返回Just FloatModel,如果没有返回Nothing?
回答
如果您想保留 的完整性FloatModel,以便所有字段都是Float值,您可以使用一个接受 aModel并返回 a的函数,该函数Maybe FloatModel仅在可以解析所有字段时成功。
这可以通过映射每个字段来完成,这样单个失败就会“冒泡”并导致函数返回Nothing。
deserializeModel : Model -> Maybe FloatModel
deserializeModel { age, weight, height, appetite } =
Maybe.map4 FloatModel
(String.toFloat age)
(String.toFloat weight)
(String.toFloat height)
(String.toFloat appetite)