我很困惑number.它似乎是一个类型,类似于超类型,Int和java.lang.NumberFloat一样,但是:
number.注意:
> 1024
1024 : number
> 1024.0
1024 : Float
> floor(1024)
1024 : Int
Run Code Online (Sandbox Code Playgroud)
我们使用一个值名称number:
> number = 144
144 : number
> number
144 : number
> number = floor(144)
144 : Int
> number
144 : Int
Run Code Online (Sandbox Code Playgroud)
并且:
> Result.Ok 12
Ok 12 : Result error number
> Result.Ok 12.0
Ok 12 : Result error Float
> Result.Ok (floor 12)
Ok 12 : Result error Int
Run Code Online (Sandbox Code Playgroud)
什么是number?
它是一个笨拙地命名的联合类型吗?语法中的不合理?
(异想天开:为什么没有"类型宇宙中的东西"的特殊语法,?Int而另一种类似于"元类型的宇宙中的东西",例如?X.榆树,通过设计注释 - 穷人有时难以破译.)
据我所知,number它是一种内置类型类,类似于Java中的接口,它描述了可以对实现接口的类型执行哪些操作.但是在Java中,从消费者的角度来看,接口被指定为普通类型,类型类是对类型变量的约束,由约定使用"魔术"类型变量名称(如number 或)指定comparable.
在具有"适当"类型类支持的语言中,例如Haskell,您可以单独指定约束,即Number a => a -> a.但是在Elm中,只有几个内置类型类,为了能够使用一些相当直观的内置类型类而不得不学习这个概念和语法的负担被认为是不必要的.虽然你可能不会直观地理解它的含义,但你应该能够很好地理解它,至少能够使用numbers或comparables作为参数的大多数函数.它的确切含义可以在后面解释(虽然我有时想知道官方解释将会有多久......).
我希望这足以回答你的问题,但如果还不清楚,请告诉我.