Elm 将HTML.App导入为HTML

Elm 将HTML.App导入为HTML,elm,Elm,位于的elm教程有以下几行: import Html exposing (Html, button, div, text) import Html.App as Html 我不明白这些导入的结果是什么名称Html引用的。是Html.App还是Html包中的函数?以及原因。将Html.App导入为App 它基本上是从html包导入应用程序。这些功能将帮助您建立一个遵循Elm体系结构的Elm程序,这是一种创建优秀代码的模式,随着项目的发展,它将保持出色的性能。import Html.App as

位于的elm教程有以下几行:

import Html exposing (Html, button, div, text)
import Html.App as Html

我不明白这些导入的结果是什么名称
Html
引用的。是
Html.App
还是
Html
包中的函数?以及原因。

将Html.App导入为App


它基本上是从html包导入应用程序。这些功能将帮助您建立一个遵循Elm体系结构的Elm程序,这是一种创建优秀代码的模式,随着项目的发展,它将保持出色的性能。

import Html.App as App


它基本上是从html包导入应用程序。这些函数将帮助您建立一个遵循Elm体系结构的Elm程序,这是一种创建伟大代码的模式,随着项目的发展,它将保持伟大。

以下是我的理解

  • 如果
    Html
    单独使用,则它引用定义的类型 在
    Html
    模块内部,它可以单独使用,因为 它通过
    import
    指令公开。 (即
    Html.Html

  • Html.xx
    xx
    是任意的,以
    Html.App
    模块公开的为准) 是模块
    Html.App
    公开的
    xx
    (即
    Html.App.xx
    )。 而且它不能单独使用,因为它不是随 用单词
    Html
    分隔名称

请注意,句点
只能是名称间距运算符,如果 左边的单词以大写字母开头。 而且,只有值(必须以小写字母开头)可以具有属性,其中也可以使用
。 (
ModuleName.TypeName
vs
recordValue.property
) 因此,这并不含糊

但是,如果两个模块公开相同的名称 (例如
Html.xx
Html.App.xx
) ,则
xx
会变得模棱两可 编译器会抱怨的

例如,当导入
Html
模块时,
exposing(…)


我希望这是有意义的…

这是我的理解

  • 如果
    Html
    单独使用,则它引用定义的类型 在
    Html
    模块内部,它可以单独使用,因为 它通过
    import
    指令公开。 (即
    Html.Html

  • Html.xx
    xx
    是任意的,以
    Html.App
    模块公开的为准) 是模块
    Html.App
    公开的
    xx
    (即
    Html.App.xx
    )。 而且它不能单独使用,因为它不是随 用单词
    Html
    分隔名称

请注意,句点
只能是名称间距运算符,如果 左边的单词以大写字母开头。 而且,只有值(必须以小写字母开头)可以具有属性,其中也可以使用
。 (
ModuleName.TypeName
vs
recordValue.property
) 因此,这并不含糊

但是,如果两个模块公开相同的名称 (例如
Html.xx
Html.App.xx
) ,则
xx
会变得模棱两可 编译器会抱怨的

例如,当导入
Html
模块时,
exposing(…)


我希望这是有意义的…

TL;医生:

如果只有
Html
,它就是类型(最初是
Html.Html

但是如果后面有
,它就是一个模块名,您可以通过执行
Html.something
Html
Html.App
模块中获取定义


更多详细信息:

import Html
的结果是您可以访问
Html.whateverHtmlExposes

公开(Html、按钮、div、文本)
的结果是您可以编写

  • Html
    而不是
    Html.Html
    (类型)
  • 按钮
    而不是
    Html.button
    (函数)
  • 等等
import Html.App
的结果是您可以访问
Html.App.whateverhtmlappeexposes
但是由于
as Html
部分,您现在可以像
Html.whateverhtmlappeexposes
那样编写它

不要担心冲突-在这种情况下,编译器将警告您:

-- NAMING ERROR ---------------------------------------------------------- C.elm

This usage of variable `A.x` is ambiguous.

9|     Html.text A.x
                 ^^^
Maybe you want one of the following?

    A.x
    B.x

Detected errors in 1 module.
这里我将
B
导入为
A
,这两个模块都暴露了
x

榆树

榆树

榆树


TL;医生:

如果只有
Html
,它就是类型(最初是
Html.Html

但是如果后面有
,它就是一个模块名,您可以通过执行
Html.something
Html
Html.App
模块中获取定义


更多详细信息:

import Html
的结果是您可以访问
Html.whateverHtmlExposes

公开(Html、按钮、div、文本)
的结果是您可以编写

  • Html
    而不是
    Html.Html
    (类型)
  • 按钮
    而不是
    Html.button
    (函数)
  • 等等
import Html.App
的结果是您可以访问
Html.App.whateverhtmlappeexposes
但是由于
as Html
部分,您现在可以像
Html.whateverhtmlappeexposes
那样编写它

不要担心冲突-在这种情况下,编译器将警告您:

-- NAMING ERROR ---------------------------------------------------------- C.elm

This usage of variable `A.x` is ambiguous.

9|     Html.text A.x
                 ^^^
Maybe you want one of the following?

    A.x
    B.x

Detected errors in 1 module.
这里我将
B
导入为
A
,这两个模块都暴露了
x

榆树

榆树

榆树

在两个不同的名称空间中公开标识符
Html

  • 来自方括号部分的Html是一种类型。它的限定名是
    Html.Html
    ,它只能出现在类型签名中
  • 只能作为限定符显示的Html模块。因此你可以
    module B exposing (x)
    x = "x from B"
    
    module C exposing (..)
    
    import A
    import B as A
    import Html
    
    main = Html.text A.x
    
    import Html exposing (Html)
    
    import Html.App as Html