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
会传递给模型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
}
前一种变体只是简写,通常用于记录的初始化 在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