代码之家  ›  专栏  ›  技术社区  ›  Mark Karavan

Elm 0.18中的模块暴露

  •  6
  • Mark Karavan  · 技术社区  · 8 年前

    module Types exposing (..)

    然而,如果我显式地包含所有类型,代码就会中断。

    module Types exposing (Foo, Bar, Baz)

    消费文件上的导入语句也是如此;两者都需要 exposing (..)

    这两种方法的区别是什么?

    2 回复  |  直到 8 年前
        1
  •  8
  •   jpierson    8 年前

    Msg )正在定义为需要使用的联合类型 Msg(..) 导出此类型时的语法。

    module Types exposing (Msg (..))
    
    type Msg = FirstAction | SecondAction | ThirdAction
    

    或在以下情况下: 联合类型。

    import Types exposing (Msg (..))
    

    请参阅GitHub issue #968 解释联合类型为什么需要这样做。

        2
  •  3
  •   Arthur Welf    8 年前

    看看这个类型定义:

        type Foo
            = Foo
            | Baz
            | Quux
    

    你看到两个 Foo s:前一个是 类型构造器 数据构造函数 . 类型构造函数和数据构造函数位于不同的名称空间中,因此可以对两者使用相同的名称。

    当你写的时候

        import Types exposing (Foo)
    

    类型构造器 只有 的数据构造函数,在导入类型构造函数后,必须在括号中显式执行此操作:

        import Types exposing (Foo (Foo, Baz))
    

    或者,如果要导入此类型的所有数据构造函数:

        import Types exposing (Foo (..))
    
    推荐文章