在 Elm 中递增记录 属性

Incrementing record property in Elm

在 Elm 中增加 属性 记录的最佳方法是什么?

比方说,我有这样的简单模型 -

model : Model
model =
    { counter = 0 }

如果我想更新这样的东西

update : Msg -> Model -> Model
update msg model =
  case msg of
    NoOp -> model
    Increment -> { model | counter = model.counter + 1}

现在,我知道我也可以把增量写成

Increment -> { model | counter = .counter model + 1 }

但我想知道,是否有类似的方法

Increment -> { model | counter += 1} || Increment -> { model | counter++ }

甚至是这样的

Increment -> { model | counter = counter + 1 }

抱歉,如果这是一个愚蠢的问题,我刚开始使用 Elm,想了解一些信息。

您的第一个示例可能是在 Elm 中最惯用的方式:

{ model | counter = model.counter + 1}

与其他语言不同,Elm 中没有 +=++ 运算符。您经常会看到 Elm 故意选择保持语言语法小,并且这些运算符可以说会增加学习曲线并且还可能引起混淆,因为它们在其他语言中的使用意味着突变,这在 Elm 中是不存在的。

{ model | counter = .counter model + 1 } 示例是有效的,但您通常只将记录字段用作 getter 将其用作函数,例如在映射中。

-- This example would map a list of counter values from a list of models
List.map .counter models