2017-05-12 76 views
2

我一直在elixir中使用“do/end”符号,或者像命令块分隔符那样。 (换句话说,do类似于C语言的{end就像})。Elixir和Haskell中的“Do”符号

这是发生了什么事情的准确描述?还是更像Haskell do表示法,它构造了monad的语法糖,允许编写命令式编码?

回答

6

是的,没有。 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指南详细了解此功能。