增加榆树的记录属性

Oli*_*dzi 2 elm

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

让我们说,我有这样的简单模型 -

model : Model
model =
    { counter = 0 }
Run Code Online (Sandbox Code Playgroud)

如果我想更新这样的东西

update : Msg -> Model -> Model
update msg model =
  case msg of
    NoOp -> model
    Increment -> { model | counter = model.counter + 1}
Run Code Online (Sandbox Code Playgroud)

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

Increment -> { model | counter = .counter model + 1 }
Run Code Online (Sandbox Code Playgroud)

但我想知道,如果有办法与此类似

Increment -> { model | counter += 1} || Increment -> { model | counter++ }
Run Code Online (Sandbox Code Playgroud)

甚至是这样的事情

Increment -> { model | counter = counter + 1 }
Run Code Online (Sandbox Code Playgroud)

对不起,如果这是一个愚蠢的问题,我只是从榆树开始,想要一些见解.

Cha*_*ert 6

你的第一个例子可能是在Elm中最常用的例子:

{ model | counter = model.counter + 1}
Run Code Online (Sandbox Code Playgroud)

榆树没有+=++像其他语言中的运营商一样.你经常会看到榆树故意选择保持语言语法较小,这些操作符可能会增加学习曲线并且还会引入混淆,因为它们在其他语言中的使用意味着突变,这在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
Run Code Online (Sandbox Code Playgroud)