代码之家  ›  专栏  ›  技术社区  ›  David Tonhofer

榆树里的“数字”是什么

  •  4
  • David Tonhofer  · 技术社区  · 6 年前

    number . 它似乎是一种类型,类似于 Int Float java.lang.Number ,但是:

    • 它是用小写字母写的,因此在语法上类似于值的名称(我使用'value'来避免使用'constant variable'这个名称)
    • .

    > 1024
    1024 : number
    > 1024.0
    1024 : Float
    > floor(1024)
    1024 : Int
    

    让我们使用一个值名称 :

    > number = 144
    144 : number
    > number
    144 : number
    > number = floor(144)
    144 : Int
    > number
    144 : Int
    

    > 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
    

    它是一个命名很尴尬的联合类型吗?语法错误?

    (异想天开的是:为什么不为“类型的宇宙中的事物”设置一个特殊的语法呢, ↑Int ⇈X . 榆树,有时很难破译。)

    1 回复  |  直到 6 年前
        1
  •  8
  •   glennsl Namudon'tdie    6 年前

    据我所知, number 是一种内置类型类,类似于Java中的接口,它描述了可以对实现接口的类型执行哪些操作。但是,在Java中,从使用者的角度来看,接口被指定为普通类型,类型类是对类型变量的约束,由约定使用“魔术”类型变量名指定,例如 comparable .

    在具有“适当”类型类支持的语言中,例如Haskell,您可以单独指定约束,即。 Number a => a -> a . 但是在Elm中,只有几个内置类型类,我认为学习概念和语法以便能够使用几个相当直观的内置类型类的负担是不必要的。虽然您可能无法直观地理解它的确切含义,但您应该能够很好地理解它,至少能够使用大多数函数 可比 作为论据。它的确切含义可以稍后解释(尽管有时我确实想知道官方的解释要等多久……)。

    我希望这足以回答你的问题,但让我知道,如果它仍然不清楚。