Mar*_*van 4 elixir do-notation
我一直在elixir中使用"do/end"表示法或多或少像命令式块分隔符.(换句话说,do就像是像{C语言end一样}).
这是对正在发生的事情的准确描述吗?或者它更像是Haskell do符号,它为monad构造语法糖,允许类似命令式编码?
是的,不是.do/ end是关键字列表的语法便利.
您可能以前写过if表达式.人们可能期望看到的是类似的东西
if predicate do
true_branch
else
false_branch
end
Run Code Online (Sandbox Code Playgroud)
这也可以使用关键字列表编写.以下是完全相同的.
if predicate, do: true_branch, else: false_branch
Run Code Online (Sandbox Code Playgroud)
使用do/ endnotation允许我们在编写代码块时删除详细程度.以下两个if表达式是equivelent
if predicate do
a = foo()
bar(a)
end
if predicate, do: (
a = foo()
bar(a)
)
Run Code Online (Sandbox Code Playgroud)
这与定义函数相同.该def/2宏使用的关键词名单.这意味着您可以定义如下函数
def foo, do: 5
Run Code Online (Sandbox Code Playgroud)
您可以在入门指南中阅读有关此内容的更多信息.