4

我一直在长生不老药中使用“do/end”表示法,或多或少像命令式块分隔符。(换句话说,do就像{在类 C 语言中一样,end就像})。

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

4

1 回答 1

8

是和不是。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

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

于 2017-05-12T21:53:08.823 回答