Erlang并发编程:进程生成、错误处理与退出信号机制
1. 尾递归与进程生成
在编程中,尾递归是一种非常重要的技术。当我们接收消息时,处理完消息后立即再次调用循环函数,这种过程就是尾递归。例如下面的代码:
{From, Other} ->
From ! {self(), {error,Other}},
loop()
end.
尾递归函数可以被编译,使得一系列语句中的最后一个函数调用可以被简单地跳转到被调用函数的起始位置。这意味着尾递归函数可以永远循环而不消耗栈空间。
然而,如果我们编写了如下(错误的)代码:
Line 1
loop() ->
- {From, {rectangle, Width, Ht}} ->
- From ! {self(), Width * Ht},
- loop(),
5 someOtherFunc();
- {From, {circle, R}} ->
- From ! {self(), 3.14159 * R * R},
- loop();
- ...
10 end
在第4行调用 loop() 时,编译器必须考虑“在调用 loop() 之后,我必须返回到这里,因为我必须在第5行调用 someOtherFunc()
超级会员免费看
订阅专栏 解锁全文
71

被折叠的 条评论
为什么被折叠?



