【问题标题】:What does "! []" Elm code syntax in Todomvc meanTodomvc 中的 "![]" Elm 代码语法是什么意思
【发布时间】:2016-05-25 21:45:09
【问题描述】:

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

Todomvc example code中,有如下代码sn-p:

-- 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 函数接受 Msg 类型的 msgModel 类型的 model,并返回一个包含 Model 的元组和Cmd Msg

但是我应该如何阅读return语句呢?

model ! []

这句话是什么意思?返回一个“模型 [某物] 空列表”?
我是否错过了解释这一点的文档中的某些内容? (谷歌搜索“榆树!”并没有让我走远:)

【问题讨论】:

    标签: elm


    【解决方案1】:

    Elm 0.19 更新

    Elm 0.19 删除了感叹号运算符。您现在必须手动构造元组,如 (model, Cmd.none)

    Elm 0.18 的原始答案

    model ! [] 中的感叹号只是(model, Cmd.batch []) 的简写函数,它是典型的update 语句返回的类型。 It is defined here

    【讨论】:

    • 感谢您的解释。我确实遇到了神秘的 (!) : model -&gt; List (Cmd msg) -&gt; (model, Cmd msg) 行,但我无法将其翻译成 model ! [] 希望更多文档能够跟进。到目前为止感觉像是一门很有前途的语言。
    • 这是 elm 的主要问题之一。如何在网上搜索感叹号“!”?我尝试搜索大约十种“elm-lang 感叹号”的变体。我什至搜索了“haskell感叹号”。为什么我们不能按原样写(model, Cmd.batch [])?它使它不那么神奇。即使您必须使其“不那么笨拙”,也不应该像someOperator那样使用带有单词的中缀运算符吗?只是一些想法。
    • 您可以使用 Elm Packages Fancy Search(转到 Elm Packages 并单击 Fancy Search)来查找类似的功能。 Here you can search on ! 它会调出正确的功能。
    • 你们这些榆树人太快了。 :)
    • FWIW 我发现this discussion 很有帮助。
    【解决方案2】:

    请注意,此语法将在 Elm 的下一版本 (0.19) 中消失,因此请不要养成使用它的习惯 ;-)

    您今天可以使用,并且使用 0.19:

    update : Msg -> Model -> ( Model, Cmd Msg )
    update msg model =
      case msg of
        NoOp ->
          (model, Cmd.none)
    

    【讨论】:

    • 能否请您提供一个替代方案?
    • @Astrowie 你使用model ! [cmd1, cmd2] 而不是(model, Cmd.batch [cmd1, cmd2])
    猜你喜欢
    • 2013-08-18
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    相关资源
    最近更新 更多