假设我在这里有这个代码:
do_recv_loop(State) ->
receive
{do,Stuff} ->
case Stuff of
one_thing ->
do_one_thing(),
do_recv_loop(State);
another_thing ->
do_another_thing(),
do_recv_loop(State);
_ ->
im_dead_now
end
{die} -> im_dead_now;
_ -> do_recv_loop(State)
end.
现在,理论上这是尾递归的,因为对 do_recv_loop 的三个调用都不需要返回任何内容。但是 erlang 会认识到这是尾递归并适当优化吗?我担心嵌套结构可能使其无法识别它。
最佳答案
是的,它会。需要 Erlang 来优化尾调用,这显然是尾调用,因为调用函数后什么也没有发生。
我曾经希望有一个 tailcall
Erlang 中的关键字,因此编译器可以警告我无效使用,但后来我习惯了。
关于recursion - erlang 如何处理混合尾递归的 case 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5425929/