【问题标题】:"Do" notation in Elixir and HaskellElixir 和 Haskell 中的“Do”表示法
【发布时间】:2017-05-12 21:09:38
【问题描述】:

我一直在 elixir 中使用“do/end”表示法,或多或少类似于命令式块分隔符。 (换句话说,do 类似于 C 语言中的{end 类似于})。

这是对正在发生的事情的准确描述吗?还是更像是 Haskell do 表示法,它为允许类似命令式编码的 monad 构造语法糖?

【问题讨论】:

    标签: elixir do-notation


    【解决方案1】:

    是和不是。 do/end 是关键字列表的语法便利。

    你以前可能写过 if 表达式。有人可能期望看到的是类似

    if predicate do
      true_branch
    else
      false_branch
    end
    

    这也可以使用关键字列表来编写。以下是完全相同的。

    if predicate, do: true_branch, else: false_branch
    

    使用do/end 表示法可以让我们在编写代码块时消除冗长。以下两个if表达式等价

    if predicate do
      a = foo()
      bar(a)
    end
    
    if predicate, do: (
      a = foo()
      bar(a)
    )
    

    这与定义函数相同。 def/2 宏也使用关键字列表。这意味着您可以定义如下函数

    def foo, do: 5
    

    您可以在getting started 指南中阅读更多相关信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      • 2016-10-06
      • 1970-01-01
      相关资源
      最近更新 更多