gpt4 book ai didi

types - 什么是 `init : () -> (Model, Cmd Msg)` 注释?

转载 作者:行者123 更新时间:2023-12-01 08:05:11 25 4
gpt4 key购买 nike

official Elm website有一个 init 函数定义我不明白:

init : () -> (Model, Cmd Msg)
init _ =
( Loading
, Http.get
{ url = "https://elm-lang.org/assets/public-opinion.txt"
, expect = Http.expectString GotText
}
)

所以 init 函数返回一个 tuple,那么为什么不定义它的表示法:

init: (Model, Cmd Msg)

但在他们的示例中,init 返回一个函数,该函数返回一个 tuple。这是真的吗?

以及如何在 init : () -> (Model, Cmd Msg) 中读取 ()?例如,我可以说从任何东西返回一个元组吗?

最佳答案

是的,init 是一个函数。 () 被称为“单元”类型。它是一种只有一个值的类型,(),也称为“单元”。

现在我确定您会问“好吧,这似乎毫无用处。拥有一个只能是一件事的函数参数有什么意义?”。答案是,如果你写一些通用的东西,可能采用something,但并不总是必须这样做,这是非常有用的。

在这种情况下,Browser.element 指定 init 的类型应为 flags -> (model, Cmd msg),其中 flags 是一个可以是任何东西的类型变量。由于 Browser.element 不会以任何其他方式约束 flags,因此您可以将其替换为您想要的任何内容,它仍然应该可以编译。

请注意,Browser.element 有点神奇。在运行时,Elm 将查看您分配给 flags 的类型,并期望您从 JavaScript 中向其传递该类型的值。如果你不这样做,这是 Elm 在运行时失败的极少数情况之一(尽管从技术上讲,它会在你的任何 Elm 代码运行之前失败,因为你在 JavaScript 端犯了一个错误)。在此处指定 () 意味着您不需要任何标志。

更详细地解释了标志的工作原理in the guide

关于types - 什么是 `init : () -> (Model, Cmd Msg)` 注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55088825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com