我一直在elixir中使用“do / end”表示法或多或少像命令式块分隔符。 (换句话说,do
与C语言中的{
类似,end
与}
类似。
这是对正在发生的事情的准确描述吗?或者它更像是Haskell do
符号,它为monad构造语法糖,允许类似命令式编码?
答案 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指南中了解详情。