"! []" 在Todomvc中的Elm代码语法是什么意思?

57

我来自React,正在学习理解Elm。

Todomvc 示例代码中,有以下代码片段:

-- How we update our Model on a given Msg?
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
  case msg of
    NoOp ->
      model ! []        <-- What is this?

我所理解的是,update函数接收一个类型为Msgmsg参数和一个类型为Modelmodel参数,并返回一个包含ModelCmd Msg的元组。

但是如何阅读返回语句呢?

model ! []
这个语句的意思是什么?返回一个“model [something]空列表”?我有没有错过一些文档中解释这个的东西?(谷歌搜索“elm !”并没有让我走得太远 :))
这个语句的含义是什么?返回一个"model [something]空列表"?我是否错过了一些相关的文档说明?(在谷歌上搜索 "elm!" 没有帮助我找到答案 :)
2个回答

70

Elm 0.19 更新

Elm 0.19 已经移除了感叹号操作符。现在你必须手动构建元组,例如使用 (model, Cmd.none)

Elm 0.18 原始回答

model ! [] 中的感叹号是一个简写函数,等同于 (model, Cmd.batch []),它是典型 update 语句返回的类型。可以在这里找到它的定义。


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - wintvelt
11
这是Elm的一个主要问题之一。如何在网上搜索感叹号“!”?我尝试了大约十种“elm-lang感叹号”的变体。我甚至搜索了“haskell感叹号”。为什么我们不能像原样编写(model, Cmd.batch [])?这会让它少些神秘色彩。即使必须使其“不那么程序化”,那么也应该使用带有单词的中缀运算符,例如someOperator吧?以上仅为个人想法。 - abhinav
13
您可以使用 Elm Packages Fancy Search (前往 Elm Packages 并点击 Fancy Search)来查找类似的函数。在这里您可以搜索 ! 并且它会列出正确的函数。 - Chad Gilbert
5
你们 Elm 的人真是太快了。 :) - abhinav
3
对我而言,我发现这篇讨论很有帮助。 - Inactivist
显示剩余3条评论

8
请注意,这种语法将在下一个版本的Elm(0.19)中消失,因此不要养成使用它的习惯;-)
您可以使用今天和0.19:
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
  case msg of
    NoOp ->
      (model, Cmd.none)

1
请问您能否提供我们一个备选方案? - Astrowie
2
@Astrowie,你可以使用(model, Cmd.batch [cmd1, cmd2])代替model ! [cmd1, cmd2] - Simon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接