Elm:这个init是如何工作的?

Elm:这个init是如何工作的?,elm,Elm,为什么整数1会传递给模型ala1 类型别名似乎需要记录?在模型1中,“模型”用作位置记录构造函数。它等于{dieFace=1} 下面是另一个例子: type alias Model = { dieFace : Int } init : (Model, Cmd Msg) init = (Model 1, Cmd.none) Rcd可通过两种方式建造: type alias Rcd = { first : String , second : Int }

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

类型别名似乎需要记录?

模型1
中,“模型”用作位置记录构造函数。它等于
{dieFace=1}


下面是另一个例子:

type alias Model =
  { dieFace : Int
  }


init : (Model, Cmd Msg)
init =
  (Model 1, Cmd.none)
Rcd可通过两种方式建造:

type alias Rcd =
    { first : String
    , second : Int 
    }

前一种变体只是简写,通常用于记录的初始化

在Elm中没有太多未解释的魔力(这是有充分理由的),但有一点是类型和类型别名构造函数。无论何时创建类型(别名),都可以免费获得构造函数。以你为例

Rcd "some string" 4
{ first = "some string" , second = 4}
为您提供了一个(看起来有些奇怪)构造函数

type alias Model =
  { dieFace : Int
  }
免费的。如果您向记录中添加更多条目,如下所示

Model : Int -> Model 
构造函数接受更多参数

type alias Model =
  { dieFace : Int
  , somethingElse : String
  }
它们的顺序与记录项的顺序相同,因此如果更改类型别名的顺序,则必须更改构造函数的参数顺序

联合类型以类似的方式工作

Model : Int -> String -> Model 
悄悄创建构造函数:

type Shape
  = Circle Int
  | Square Int Int 

所以我要确认一下,这意味着记录保证了数据的顺序,不像javascript中的对象那样?是的,当你使用构造函数时,它们保证了-如果你使用{}符号来构造,顺序就不重要了。在模式匹配记录时(例如,在case语句或函数属性中),顺序也是相关的。
Circle: Int -> Shape 
Square : Int -> Int -> Shape