type alias Car = { model : Model, year: Int }
type Model = Crv | Enzo | Mustang | Viper
-- I can do this
enzo = Car Enzo -- partial Contructor
> myE<function> : Int -> Repl.Car
myEnzo = enzo 2018
> { model = Enzo, year = 2018 } : Repl.Car
-- but i CANNOT do this
enzo2017 = Car { year: 2017 } -- INVALID
Run Code Online (Sandbox Code Playgroud)
我怎样才能创建一个简单的构造函数,它不会强迫我按定义的顺序列出属性.
小智 5
在功能编程方面,我们需要"重新开始"一些概念.在这种情况下,混淆似乎与构造函数一词有关.Elm中的记录构造函数与面向对象语言中的对象构造函数不同.
记录构造函数不创建记录,它只创建可以创建记录的函数.它通过部分应用来实现.
在部分应用程序中,您只能按顺序提供参数.这是在lambda演算中定义的,我相信它不是特定于Elm.在使用记录构造函数创建记录的情况下,更改参数的顺序不会对结果进行更改.
我们可以使用这个方便的函数flip,它以相反的参数顺序返回相同的函数:
enzo2017 = flip Car 2017
myEnzo2017 = enzo2017 Viper
Run Code Online (Sandbox Code Playgroud)