榆树:这个init是如何工作的?

Ric*_*ich 3 elm

type alias Model =
  { dieFace : Int
  }


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

为什么整数1传递给模型ala Model 1

类型别名似乎需要记录?

Sim*_*n H 7

在Elm中没有那么多未解释的魔法(有充分理由),但有一点是类型和类型别名构造函数.每当您创建一个类型(别名)时,您都可以免费获得构造函数.所以,要使用你的例子,

type alias Model =
  { dieFace : Int
  }
Run Code Online (Sandbox Code Playgroud)

给你一个(有点奇怪的)构造函数

Model : Int -> Model 
Run Code Online (Sandbox Code Playgroud)

免费.如果您在记录中添加更多条目,请执行此操作

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

构造函数需要更多参数.

Model : Int -> String -> Model 
Run Code Online (Sandbox Code Playgroud)

这些顺序与记录条目的顺序相同,因此如果更改类型别名的顺序,则必须将参数顺序更改为构造函数.

联盟类型以类似的方式工作.

type Shape
  = Circle Int
  | Square Int Int 
Run Code Online (Sandbox Code Playgroud)

悄悄地创建构造函数:

Circle: Int -> Shape 
Square : Int -> Int -> Shape
Run Code Online (Sandbox Code Playgroud)