在别名记录中设置值

swe*_*let 1 elm

我刚开始用榆树,所以要好:)

官方Elm指南"随机"示例中,模型似乎初始化为值1,如下所示:

type alias Model =
  { dieFace : Int
  }


init : (Model, Cmd Msg)
init =
(Model 1, Cmd.none)
Run Code Online (Sandbox Code Playgroud)

我对此的理解是代码

Model 1
Run Code Online (Sandbox Code Playgroud)

设置记录中dieFace属性的值.这是正确的,如果是这样的话:设置记录属性的这种奇怪的语法是什么?我本来期望的东西是这样的

{ model | dieFace = 1 }
Run Code Online (Sandbox Code Playgroud)

Cha*_*ert 5

Model是具有单个int值的记录的类型别名dieFace.

有几种方法可以创建该类型的值:

Model 1 -- treats Model as a function with a single parameter

{ dieFace = 1 } -- creates a record that happens to coincide with the Model alias
Run Code Online (Sandbox Code Playgroud)

您看到的奇怪语法{ model | dieFace = 1 }是根据现有记录值创建新值但更改一个或多个字段的简便方法.当你的记录类型只有一个字段时,它可能没什么意义,所以让我们创建一个任意的例子:

type alias ColoredDie = { dieFace: Int, color: String }
Run Code Online (Sandbox Code Playgroud)

你可以在Elm REPL中玩游戏,也许这有助于它有意义:

> blue3 = ColoredDie 3 "blue"
{ dieFace = 3, color = "blue" } : Repl.ColoredDie
> red3 = { blue3 | color = "red" }
{ dieFace = 3, color = "red" } : { dieFace : Int, color : String }
> red4 = { red3 | dieFace = 4 }
{ dieFace = 4, color = "red" } : { color : String, dieFace : number }
> green6 = { red4 | color = "green", dieFace = 6 }
{ dieFace = 6, color = "green" } : { color : String, dieFace : number }
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读Elm的记录语法.