【发布时间】:2017-05-12 21:09:38
【问题描述】:
我一直在 elixir 中使用“do/end”表示法,或多或少类似于命令式块分隔符。 (换句话说,do 类似于 C 语言中的{,end 类似于})。
这是对正在发生的事情的准确描述吗?还是更像是 Haskell do 表示法,它为允许类似命令式编码的 monad 构造语法糖?
【问题讨论】:
标签: elixir do-notation
我一直在 elixir 中使用“do/end”表示法,或多或少类似于命令式块分隔符。 (换句话说,do 类似于 C 语言中的{,end 类似于})。
这是对正在发生的事情的准确描述吗?还是更像是 Haskell do 表示法,它为允许类似命令式编码的 monad 构造语法糖?
【问题讨论】:
标签: elixir do-notation
是和不是。 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 指南中阅读更多相关信息。
【讨论】: