&引用;“做”;Elixir和Haskell符号

&引用;“做”;Elixir和Haskell符号,elixir,do-notation,Elixir,Do Notation,我在elixir中使用了“do/end”符号,或多或少类似于命令块分隔符。(换句话说,do类似于{在类C语言中,end类似于}) 这是对正在发生的事情的准确描述吗?还是更像Haskelldo符号,它为单子构造了语法糖,允许类似命令的编码?是和否。do/结束是关键字列表的语法便利 您以前可能写过if表达式。人们可能期望看到的是 if predicate do true_branch else false_branch end 这也可以使用关键字列表编写。以下是完全相同的 if predi

我在elixir中使用了“do/end”符号,或多或少类似于命令块分隔符。(换句话说,
do
类似于
{
在类C语言中,
end
类似于
}


这是对正在发生的事情的准确描述吗?还是更像Haskell
do
符号,它为单子构造了语法糖,允许类似命令的编码?

是和否。
do
/
结束
是关键字列表的语法便利

您以前可能写过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 foo, do: 5
您可以在指南中了解更多信息