在 Elm 中更新 Maybe 记录

Updating a Maybe Record in Elm

我有一个应用程序,用户可以在其中创建项目。模型中的 currentProject 是一个 Maybe Project 类型,初始值设置为 Nothing (因为该用户可能还没有创建任何项目)。

type alias Project =
    { name : String }

type alias Model =
    { user : User
    , currentProject : Maybe Project
    }

这是在 init 中的型号:

currentProject = Nothing

然后我有一个下拉菜单,用户可以在其中 select 一个项目。在 selecting 后,onClick 调用以下更新:

type Msg
    = ...
    | SetProject Project

我尝试 运行 的更新函数如下所示:

SetProject project ->
    case project of
       Just project ->
         ( { model | currentProject = project }, Cmd.none )

       Nothing ->
         ( model, Cmd.none )

我得到一个错误,因为 project 的类型是 Project 而不是 Maybe Project

我知道该项目存在,因为它来自应用程序中的现有项目列表。但是,我无法将 currentProject 设置为键入 Project,因为我需要使用 Nothing.

初始化模型

那么,如何更新类型为 ProjectMaybe Project 记录?

使用Just构造函数:

SetProject project ->
     ( { model | currentProject = Just project }, Cmd.none )

您的消息说您需要一个项目类型,但是您正在对其进行模式匹配以检查它是否是(可能是项目),但事实并非如此。所以,要么在你的消息中传递一个 Maybe 项目,要么将你的更新函数更改为这个。

SetProject project ->
    ( { model | currentProject = Just project }, Cmd.none )