我一直在长生不老药中使用“do/end”表示法,或多或少像命令式块分隔符。(换句话说,do
就像{
在类 C 语言中一样,end
就像}
)。
这是对正在发生的事情的准确描述吗?或者它更像是 Haskelldo
表示法,它为允许类似命令式编码的 monad 构造语法糖?
我一直在长生不老药中使用“do/end”表示法,或多或少像命令式块分隔符。(换句话说,do
就像{
在类 C 语言中一样,end
就像}
)。
这是对正在发生的事情的准确描述吗?或者它更像是 Haskelldo
表示法,它为允许类似命令式编码的 monad 构造语法糖?
是和不是。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
您可以在入门指南中阅读更多相关信息。