Mon*_*Kin 12 erlang expression block
我只是begin...end在Erlang的文档(这里)中踩了一脚,但它没有给出一些如何有用的例子.
在StackOverflow中查看我发现了两个人们将要使用的情况begin...end,两者都在列表推导中:
但我想知道是否有更多此类用途.
任何人都可以提供另一种方案,其中a begin...end在Erlang中有用吗?
谢谢
宏,例如:
-define(M(A, B),
begin
C = foo(),
bar(A, B, C)
end).
Run Code Online (Sandbox Code Playgroud)
评估一个catch(总是同一个想法让多个表达式减少到一个)
Res = (catch
begin
C = foo(Bar),
io:format("evaluation of C ok~n"),
D = bar(A, B, C)
end),
Run Code Online (Sandbox Code Playgroud)
正如前面的回答者提到的,只要您需要有多个表达式但只允许一个表达式,就可以使用此构造。
不过,大多数这样的案例都会被认为是臭作风。我只记得需要使用单个表达式的几个地方:函数调用中的参数、catch表达式、case of以及try of列表理解。除了列表理解之外的所有这些都不应该与begin end构造一起使用,因为变量泄漏到外部作用域可能导致后续绑定变得匹配。
列表理解表达式是不同的,因为它被转换为具有自己的作用域的单独函数,并且没有引入begin end泄漏到外部作用域的变量。