在榆树语言中,我很难解释我的问题...... 在这些榆树片段中: 我理解像
这样的签名update : Msg -> Model -> Model
其中参数/输出由箭头分隔,但我如何阅读/理解:
Sub Msg
Program Never Model Msg
在:
main : Program Never Model Msg
main =
program
{ init = init
, view = view
, update = update
, subscriptions = subscriptions
}
subscriptions : Model -> Sub Msg
subscriptions model =
Sub.none
答案 0 :(得分:11)
在类型签名中,参数类型由->
分隔,最后一种类型为返回值。
如果没有 ->
符号,则表示它是该类型的值。在main
示例中,main
的类型为Program Never Model Msg
。它没有箭头,所以它不需要参数。
现在,类型注释中的每个参数和返回值可能有多个以空格分隔的内容,如main
示例中所示。最左边是类型,后跟由空格分隔的类型参数。
Program Never Model Msg
| | | |
| ------|-----
type type parameters
类型参数类似于C#等语言中的泛型。 C#中的等效语法是:
void Program<Never, Model, Msg>()
C#没有直接关联,因为它有一种不同的约束泛型类型参数的方式,但总体思路成立。
榆树指南目前没有大量信息,但这里是section talking about types。
答案 1 :(得分:6)
Sub Msg
,List Int
,Program Never Model Msg
Sub
,List
和Program
是类型构造函数。您可以将它们视为采用类型并返回其他类型的函数。
单独Sub
,List
和Program
不是完整类型。它们就像是一块拼错的拼图。当一个人添加缺失的部分时,拼图就完成了。
我通常使用of
中的List
一词,Int
Program
Never
Model
,{{1} }和Msg
。