gpt4 book ai didi

elm - 如何在榆树中查看自定义类型?

转载 作者:行者123 更新时间:2023-12-01 23:06:50 26 4
gpt4 key购买 nike

这里是数据模型,目标很简单,只需要在 HTML 中查看类型 Gift 并且用户可以使用下拉列表来更新 type_ 字段>礼物。但问题是如何从自定义类型构建下拉列表?

type Fruit
= Apple
| Banana
| Orange

type alias Gift =
{ quantity : int
type_ : Fruit
}

我试图在 View 上添加一个update/view操作

如何将类型 Fruit 转换为 String ?有两种可能的解决方法:

  1. 构建一个字典,可以将 Fruit 转换为 String

     {Apple:"Apple",Banana,"Banana"}

    我不认为这会起作用,因为 Dict 中的键需要是 Comparable,但是如何在 custom type 中实现排序?有一个问题,但似乎还没有解决方案 ( https://github.com/elm/compiler/issues/774 )

  2. 使用Enum/makeEnum模块这将带来更多代码并且很容易被破坏。

     fruitTypeEnum = Enum.makeEnum [Apple, Banana, Orange ]

    -- in view
    (List.map (\x -> Enum.toString fruitTypeEnum x) [Apple,Banana,Orange])

    这必须在三个地方(包括声明)维护apple,banana,orange列表

感谢您花时间阅读本文。感谢任何帮助:)

最佳答案

Elm 中没有内置方法来获取自定义类型的所有变体的列表(Elm 通常回避“魔术”元编程,而倾向于显式)。 As glennsl answered ,使用 case 表达式是为自定义类型实现 toString 函数的一种非常简洁直接的方法。

该类型的所有变体的列表必须与类型定义本身分开保存,但您应该创建一个列表,在这种情况下可能命名为 allFruit,您可以在任何地方使用它把它们都列出来。测试可以帮助您确保在询问新变体时不会遗漏任何内容。

一种更高级的技术是使用 code generation自动从源代码创建列表。

关于elm - 如何在榆树中查看自定义类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70731164/

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