在official Elm website中有一个我不理解的cat
函数定义:
sns.catplot(x="borough", y="pickups", col='cat', hue="borough", kind='bar', sharey=False, data=comb_df, size=4, aspect=1)
plt.legend()
plt.show()
所以sharey=False
函数返回一个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
?例如,我可以说从任何东西返回元组吗?
答案 0 :(得分:7)
是的,init
是一个函数。 ()
被称为“单位”类型。这种类型只有一个值()
,也称为“单位”。
现在,我确定您正在问“看起来似乎毫无用处。拥有只能是一件事的函数参数有什么意义?”。答案是,如果您编写的某些可能需要但不一定总是需要的东西,这将非常有用。
在这种情况下,Browser.element
指定init
的类型应为flags -> ( model, Cmd msg )
,其中flags
是可以是任何类型的类型变量。由于Browser.element
不会以任何其他方式约束flags
,因此您可以将其替换为所需的任何内容,并且仍然可以编译。
但是请注意Browser.element
有点神奇。在运行时,Elm将查看您已分配给flags
的类型,并希望您从JavaScript中传递该类型的值。如果您不这样做,那么这是Elm在运行时失败的极少数实例之一(尽管从技术上讲,它会在任何Elm代码运行之前失败,因为您在JavaScript方面犯了一个错误)。在此处指定()
意味着您不希望看到任何标志。
更详细地说明了标记的工作原理in the guide