什么是 init : () -> (Model, Cmd Msg) 注释?
What is `init : () -> (Model, Cmd Msg)` annotation?
在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
函数return是一个tuple
,那为什么不定义它的表示法为:
init: (Model, Cmd Msg)
但在他们的示例中 init
return 是一个 return 是 tuple
的函数。这是真的吗?
如何在init : () -> (Model, Cmd Msg)
中阅读()
?例如,我可以从任何东西 return 中说一个元组吗?
是的,init
是一个函数。 ()
被称为 "unit" 类型。它是一种只有一个值的类型,()
,也称为 "unit"。
现在我确定你在问 "Well that seems pretty useless. What's the point of having a function argument that can ever only be one thing?"。答案是,如果你写一些通用的东西,可能需要一些东西,但并不总是必须这样做,这将非常有用。
在这种情况下,Browser.element
指定 init
应该具有类型 flags -> ( model, Cmd msg )
,其中 flags
是一个可以是任何类型的变量。由于 Browser.element
不会以任何其他方式约束 flags
,您可以将其替换为任何您想要的,并且它应该仍然可以编译。
但是请注意 Browser.element
有点神奇。在运行时,Elm 将查看您分配给 flags
的类型,并期望您将 JavaScript 中的该类型的值传递给它。如果你不这样做,这是 Elm 在运行时失败的极少数情况之一(尽管从技术上讲,它会在你的任何 Elm 代码运行之前失败,因为你在 JavaScript 端犯了一个错误).在此处指定 ()
意味着您不需要任何标志。
更详细地解释了标志的工作原理in the guide
在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
函数return是一个tuple
,那为什么不定义它的表示法为:
init: (Model, Cmd Msg)
但在他们的示例中 init
return 是一个 return 是 tuple
的函数。这是真的吗?
如何在init : () -> (Model, Cmd Msg)
中阅读()
?例如,我可以从任何东西 return 中说一个元组吗?
是的,init
是一个函数。 ()
被称为 "unit" 类型。它是一种只有一个值的类型,()
,也称为 "unit"。
现在我确定你在问 "Well that seems pretty useless. What's the point of having a function argument that can ever only be one thing?"。答案是,如果你写一些通用的东西,可能需要一些东西,但并不总是必须这样做,这将非常有用。
在这种情况下,Browser.element
指定 init
应该具有类型 flags -> ( model, Cmd msg )
,其中 flags
是一个可以是任何类型的变量。由于 Browser.element
不会以任何其他方式约束 flags
,您可以将其替换为任何您想要的,并且它应该仍然可以编译。
但是请注意 Browser.element
有点神奇。在运行时,Elm 将查看您分配给 flags
的类型,并期望您将 JavaScript 中的该类型的值传递给它。如果你不这样做,这是 Elm 在运行时失败的极少数情况之一(尽管从技术上讲,它会在你的任何 Elm 代码运行之前失败,因为你在 JavaScript 端犯了一个错误).在此处指定 ()
意味着您不需要任何标志。
更详细地解释了标志的工作原理in the guide