"Do" Elixir 中的符号和 Haskell
"Do" notation in Elixir and Haskell
我一直在 elixir 中使用 "do/end" 符号,或多或少像命令式块定界符。 (换句话说,do
类似于 C 类语言中的 {
,end
类似于 }
)。
这是对正在发生的事情的准确描述吗?或者它更像是 Haskell do
表示法,它为允许类似命令式编码的 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
您可以在 getting started 指南中阅读更多相关信息。
我一直在 elixir 中使用 "do/end" 符号,或多或少像命令式块定界符。 (换句话说,do
类似于 C 类语言中的 {
,end
类似于 }
)。
这是对正在发生的事情的准确描述吗?或者它更像是 Haskell do
表示法,它为允许类似命令式编码的 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
您可以在 getting started 指南中阅读更多相关信息。