gpt4 book ai didi

elm - 复合类型和 Html onInput

转载 作者:行者123 更新时间:2023-12-04 14:09:28 26 4
gpt4 key购买 nike

一周前,我终于找到了一种将消息分成不同类别的方法 (Here is the SO question where I got my answer)

现在我已经实现了这个解决方案:

type Msg 
= AMsg AMsg
| BMsg BMsg
| CMsg CMsg

然后我定义了AMsg如下

type AMsg
= ActionOne Int String
| ActionTwo Int

一切正常,除非我将 ActionOne 与 onInput Html.Event

一起使用
input [onInput (AMsg (ActionOne model.id))] []

这个错误告诉我 onInput 需要一个 String -> Msg 类型但是正在获取一个 AMsg 类型。

如果我使用 onClick 并自己传入第二个参数,这会很好用

input [onClick (AMsg (ActionOne model.id "hello"))] []

但是由于我需要使用 onInput 并且这就是将第二个 String 参数传递给 ActionOne 的原因,所以我被卡住了。如果我改变我的类型来适应这个

type Msg 
= AMsg AMsg String
| BMsg BMsg
| CMsg CMsg

type AMsg
= ActionOne Int
| ActionTwo Int

这可行,但随后我强制 ActionTwo 也采用我不想要的字符串。

否则我会卡在直接在 Msg 下指定 ActionOne

type Msg 
= AMsg AMsg
| BMsg BMsg
| CMsg CMsg
| ActionOne Int String

type AMsg
= ActionTwo Int

我真的很关心将 Msg 分成不同的类别——如果我想将 elm 用于更大的项目,这对我来说似乎非常重要。有什么想法吗?

最佳答案

传递给 onInput 的函数必须有类型 String -> msg (或者更具体地说,String -> Msg 。)

您可以通过使用 lambda 来实现:

input [onInput (\str -> (AMsg (ActionOne model.id str)))] []

您也可以使用函数组合( << 函数)来实现相同的目的,而无需讨论参数 str。明确:

input [ onInput <| AMsg << ActionOne model.id ]

关于elm - 复合类型和 Html onInput,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53422973/

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