在Elm官方网站上有一个init
我不理解的函数定义:
init : () -> (Model, Cmd Msg)
init _ =
( Loading
, Http.get
{ url = "https://elm-lang.org/assets/public-opinion.txt"
, expect = Http.expectString GotText
}
)
Run Code Online (Sandbox Code Playgroud)
因此,init
函数返回一个tuple
,然后为什么不将其符号定义为:
init: (Model, Cmd Msg)
Run Code Online (Sandbox Code Playgroud)
但是在他们的示例中init
返回的函数返回一个tuple
。这是真的?
以及如何阅读()
的init : () -> (Model, Cmd Msg)
?例如,我可以说从任何东西返回元组吗?
是的,init
是一个功能。()
称为“单位”类型。这种类型只有一个值,()
也称为“单位”。
现在,我确定您在问“看起来似乎毫无用处。拥有只能是一件事的函数参数有什么意义?”。答案是,如果您编写泛型的东西可能会花点时间,但不必总是这样做,这将非常有用。
在这种情况下,Browser.element
指定init
应该具有type flags -> ( model, Cmd msg )
,其中flags
type变量可以是任何值。由于Browser.element
没有flags
任何其他限制,因此您可以将其替换为所需的任何内容,并且仍然可以编译。
但是请注意,Browser.element
这有点不可思议。在运行时,Elm将查看分配给您的类型,flags
并期望您从JavaScript向其传递该类型的值。如果不这样做,这是Elm在运行时失败的极少数实例之一(尽管从技术上讲,它会在任何Elm代码运行之前失败,因为您在JavaScript方面犯了一个错误)。()
在此处指定意味着您不希望有任何标志。
指南中对标志的工作方式进行了详细说明
归档时间: |
|
查看次数: |
78 次 |
最近记录: |