gpt4 book ai didi

elm - 如何制作带有可选元素的解码器?

转载 作者:行者123 更新时间:2023-12-04 00:01:56 28 4
gpt4 key购买 nike

我被一个解码器困住了,它应该将数组 [ 9.34958, 48.87733, 1000 ] 解码为 Point,其中索引 2(高度)是可选的。

type alias Point =
{ elev : Maybe Float
, at : Float
, lng : Float
}

因此我创建了以下解码器:

fromArrayDecoder : Decoder Point
fromArrayDecoder =
map3 Point
(index 2 Decode.float |> Decode.maybe)
(index 1 Decode.float)
(index 0 Decode.float)

我现在的问题是,当索引 2 丢失或为任何类型(如字符串等)时,此解码器成功。但我希望它仅在缺少 elev 时成功,而不是在它的类型错误时成功。有没有办法做到这一点?

最佳答案

如果“缺失”是指该值可以为 null,则可以使用 nullable而不是 也许:

fromArrayDecoder : Decoder Point
fromArrayDecoder =
map3 Point
(index 2 Decode.float |> Decode.nullable)
(index 1 Decode.float)
(index 0 Decode.float)

如果是 3 元素数组或 2 元素数组,您可以使用 oneOf按顺序尝试几个解码器:

fromTwoArrayDecoder : Decoder Point
fromTwoArrayDecoder =
map3 (Point Nothing)
(index 1 Decode.float)
(index 0 Decode.float)

fromThreeArrayDecoder : Decoder Point
fromThreeArrayDecoder =
map3 Point
(index 2 Decode.float |> Decode.map Just)
(index 1 Decode.float)
(index 0 Decode.float)

fromArrayDecoder : Decoder Point
fromArrayDecoder =
oneOf
[ fromThreeArrayDecoder
, fromTwoArrayDecoder
]

请记住先尝试 3 元素解码器,因为 2 元素解码器也会在 3 元素数组上成功,但反之则不行。

关于elm - 如何制作带有可选元素的解码器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60082266/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com