gpt4 book ai didi

list - Elm 在更新列表中添加项目

转载 作者:行者123 更新时间:2023-12-04 23:15:22 25 4
gpt4 key购买 nike

我正在尝试了解 Elm lang,但在处理我的小应用程序的更新部分时遇到了一些问题。

实际上,我希望当我点击一个按钮时,它会在列表中添加一个新用户,这很简单,没有任何意义,但我需要理解。

现在,我有以下代码:

main =
Html.beginnerProgram { model = model, view = view, update = update }

type Msg = AddUser
type alias User =
{
username : String,
firstname: String,
lastname: String
}

model: List User
model =
[]

update: Msg -> User -> List User -> List User
update msg user userList =
case msg of
AddUser ->
user::userList

我有以下错误:
-- TYPE MISMATCH ------------------------------------------------------ main.elm

The argument to function `beginnerProgram` is causing a mismatch.

5| Html.beginnerProgram { model = model, view = view, update = update }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Function `beginnerProgram` is expecting the argument to be:

{ ..., update : Msg -> List User -> List User }

But it is:

{ ..., update : Msg -> User -> List User -> List User }

Hint: Problem in the `update` field. I always figure out field types in
alphabetical order. If a field seems fine, I assume it is "correct" in
subsequent checks. So the problem may actually be a weird interaction with
previous fields.

事实上,我目前对更新功能的理解是:
  • 在返回接受用户的函数的第一个函数中获取 Msg
  • 此函数(接受用户)返回一个接受用户列表的函数(使操作 user::userList)
  • 最后一个函数返回一个用户列表,我就完成了

  • 但我无法理解在这种情况下我错在哪里。

    你能帮助我吗 ?

    最佳答案

    Html.beginnerProgram 期望更新函数的类型为 Msg-> Model -> Model (您的模型名为“用户”,这没问题)。您要添加的用户属于“AddUser”联合类型。

    type Msg = AddUser User

    这意味着您将新用户与 Msg 一起传递(因此您可以使用不同的消息传递不同的内容)。
    要获得新用户,您可以在“案例”中对其进行模式匹配
    case msg of
    AddUser newUser ->
    newUser :: userList

    关于list - Elm 在更新列表中添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43439749/

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