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

时间:2017-04-08 03:24:36

标签: elm

type alias Model =
  { dieFace : Int
  }


init : (Model, Cmd Msg)
init =
  (Model 1, Cmd.none)

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

类型别名似乎需要记录?

2 个答案:

答案 0 :(得分:7)

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

var saveWorkOrderViewModel = {
    workOrderId: workorderId,
    DelayReasons[0].DelayReasonId: xxxx,
    DelayReasons[1].DelayReasonId: xxxx,
    ....
};

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

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 

答案 1 :(得分:3)

Model 1"模型"用作位置记录构造函数。它等于{dieFace = 1}

这是另一个例子:

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

Rcd可以用两种方式构建:

Rcd "some string" 4
{ first = "some string" , second = 4}

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