在榆树中解码元组
Decode a tuple in elm
我正在寻找一种方法来解码 elm 中包含两个元素的元组。
[[字符串,布尔]]
外部列表很容易用 Json.list 解析,但如何将数组解码为元组?我尝试了 的解决方案,但我得到的只是关于解码器类型的错误,也许,我假设自该答案以来 elm 发生了一些变化。或者我不知道是否缺少导入。
谢谢
最简单的是
map2 (,) (index 0 string) (index 1 string)
无法将数组转换为元组。
这是因为数组可以是任意长度,而元组是预先确定的长度;在编译时确定。
因此,要执行转换,您需要添加一些约束条件,这当然取决于您的问题域。例如,我可能决定只能转换具有两个元素的数组。像这样:
import Array exposing (Array)
arrayToTuple : Array a -> Maybe (a, a)
arrayToTuple array =
case Array.toList array of
(a::b::_) -> Just (a, b)
_ -> Nothing
由于长度的不同,函数必须return一个Maybe (a, a)
;或捕获两种可能情况的类似类型。
微妙的问题是:转换是有损,你必须在某些时候考虑到这一点。
例如,您可以在解码器中拒绝不合适的数组,但随后您将不得不考虑解码失败的原因。或者,您可以 捕获 Maybe
中的失败,然后被吸入 Maybe
-land。无论哪种方式,您都必须考虑转换失败的可能性。
自 elm 0.19 起使用:
map2 (Tuple.pair) (index 0 string) (index 1 string)
https://github.com/elm/compiler/blob/master/docs/upgrade-instructions/0.19.0.md#changes
我正在寻找一种方法来解码 elm 中包含两个元素的元组。
[[字符串,布尔]]
外部列表很容易用 Json.list 解析,但如何将数组解码为元组?我尝试了
谢谢
最简单的是
map2 (,) (index 0 string) (index 1 string)
无法将数组转换为元组。
这是因为数组可以是任意长度,而元组是预先确定的长度;在编译时确定。
因此,要执行转换,您需要添加一些约束条件,这当然取决于您的问题域。例如,我可能决定只能转换具有两个元素的数组。像这样:
import Array exposing (Array)
arrayToTuple : Array a -> Maybe (a, a)
arrayToTuple array =
case Array.toList array of
(a::b::_) -> Just (a, b)
_ -> Nothing
由于长度的不同,函数必须return一个Maybe (a, a)
;或捕获两种可能情况的类似类型。
微妙的问题是:转换是有损,你必须在某些时候考虑到这一点。
例如,您可以在解码器中拒绝不合适的数组,但随后您将不得不考虑解码失败的原因。或者,您可以 捕获 Maybe
中的失败,然后被吸入 Maybe
-land。无论哪种方式,您都必须考虑转换失败的可能性。
自 elm 0.19 起使用:
map2 (Tuple.pair) (index 0 string) (index 1 string)
https://github.com/elm/compiler/blob/master/docs/upgrade-instructions/0.19.0.md#changes