Elm 主函数类型注解
Elm main function type annotation
这个Elm例子的main函数类型注解是什么意思?
main : Html msg
main =
div [] [ text "1" ]
什么是 Html 和 msg?
首先,那个不是函数,因为它不接受任何参数。
但是,类型注释表示 main
属于 Html
类型,具有未知变体 msg
.
Html
是类型,如 Int
或 String
,msg
是类型变体。
有些类型可以有变体,以List a
为例。
List a
表示您要声明一个 List
,其中类型变体不相关或未知。例如,List.length
方法的类型注释是:
length : List a -> Int
当您使用此方法时,您肯定会得到一个类型而不是 a
,例如 String
或 Int
或其他,根据 [=27 的行为=] 不变。
那么请不要被 Html
的 msg
搞糊涂了。它具有相同的含义。在 Elm 中,您呈现 html 可能会发送一些消息的代码,并且您通常将它们定义为联合类型,例如:
type Msg
= ClickedSave
| EnteredText String
因此,您的主要声明可以保留 Html msg
或 Html a
,直到您发送消息。
例如,如果您向 div
添加一个 onClick
处理程序,例如:
main =
div [ onClick ClickedSave ] [ text "1" ]
类型注释变为(无论你是否注释它)Html Msg
,因为现在你发送的消息是类型 Msg
.
希望它清楚,对不起我的英语,它不是我的母语。
这个Elm例子的main函数类型注解是什么意思?
main : Html msg
main =
div [] [ text "1" ]
什么是 Html 和 msg?
首先,那个不是函数,因为它不接受任何参数。
但是,类型注释表示 main
属于 Html
类型,具有未知变体 msg
.
Html
是类型,如 Int
或 String
,msg
是类型变体。
有些类型可以有变体,以List a
为例。
List a
表示您要声明一个 List
,其中类型变体不相关或未知。例如,List.length
方法的类型注释是:
length : List a -> Int
当您使用此方法时,您肯定会得到一个类型而不是 a
,例如 String
或 Int
或其他,根据 [=27 的行为=] 不变。
那么请不要被 Html
的 msg
搞糊涂了。它具有相同的含义。在 Elm 中,您呈现 html 可能会发送一些消息的代码,并且您通常将它们定义为联合类型,例如:
type Msg
= ClickedSave
| EnteredText String
因此,您的主要声明可以保留 Html msg
或 Html a
,直到您发送消息。
例如,如果您向 div
添加一个 onClick
处理程序,例如:
main =
div [ onClick ClickedSave ] [ text "1" ]
类型注释变为(无论你是否注释它)Html Msg
,因为现在你发送的消息是类型 Msg
.
希望它清楚,对不起我的英语,它不是我的母语。