Elm 为什么写“HTMLMSG”而不是“HTMLA”是习惯用法?
我是榆树的初学者。这是一个关于风格的问题,而不是某样东西是如何运作的 例如,我们有Elm 为什么写“HTMLMSG”而不是“HTMLA”是习惯用法?,elm,Elm,我是榆树的初学者。这是一个关于风格的问题,而不是某样东西是如何运作的 例如,我们有 viewValidation:Model->Html msg 我知道这样做是为了viewValidation model可以与Html Msg类型的值共存于同一列表中。但是,既然msg这里只是一个类型变量,为什么不使用更传统的a msg打算传达哪些额外信息?Elm体系结构鼓励一致地命名类型,如Model和msg,以传达其含义。使用小写字母msg只会让我们更清楚地了解其意图 它很可能被命名为a,但可以说它并没有传达
viewValidation:Model->Html msg
我知道这样做是为了viewValidation model
可以与Html Msg
类型的值共存于同一列表中。但是,既然msg
这里只是一个类型变量,为什么不使用更传统的a
msg
打算传达哪些额外信息?Elm体系结构鼓励一致地命名类型,如Model
和msg
,以传达其含义。使用小写字母msg
只会让我们更清楚地了解其意图
它很可能被命名为a
,但可以说它并没有传达那么多信息
编辑
详细说明,考虑包的文档。 让我们看一下以下各项的定义:
程序:
{init:(模型,Cmd msg)
,更新:msg->model->(model,Cmd-msg)
,订阅:模型->子消息
,视图:模型->Html消息
}->程序从不建模
概述了框架如何使用您的模型
和Msg
类型来承载状态和指示要执行的操作的非常明确的意图。通过在文档中始终使用小写的msg
和model
,可以更容易地理解内容
考虑另一种更为Haskell式的方法,其中类型参数通常从a
开始缩写:
程序:
{init:(a,Cmd b)
,更新:b->a->(a,Cmd b)
,订阅:a->Sub b
,视图:a->HTMLB
}->程序从来都不是b
该定义完全正确,但我认为它远不如
程序
的文档解释,该文档提供了有关您的Msg
和模型
类型的强大提示。感谢您的回复!你能更明确地说明额外传达的信息是什么吗?我已经用文档中的例子更新了上面的答案。啊,我明白了。因此msg
意味着“这可能是msg
类型的值,但是它在您的程序中定义了”。如果用户未定义Msg
,而是从该库导入,则类型将为Html Msg
,而不是Html Msg
。你认为这是一个公平的总结吗?听起来是一个充分的总结