Elixir和Haskell的“做”符号

时间:2017-05-12 21:09:39

标签: elixir do-notation

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

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

1 个答案:

答案 0 :(得分:7)

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

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

if predicate do
  true_branch
else
  false_branch
end

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

if predicate, do: true_branch, else: false_branch

使用do / end表示法可以在编写代码块时删除详细程度。如果表达式是等效的,则以下两个

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

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

这对于定义函数是一样的。 def/2宏也使用关键字列表。这意味着您可以定义类似以下的函数

def foo, do: 5

您可以在getting started指南中了解详情。