比方说,我有这样的代码在这里:如何二郎手柄case语句与尾递归混合
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会认识到这是尾递归并且适当地优化吗?我担心嵌套结构可能使它无法识别它。
+1。对于任何**可证**尾递归的逻辑,Erlang会根据语言定义对其进行优化。 – 2011-03-24 23:59:44
我很高兴你习惯了它,因为'tailcall'是一个真正可怕的想法。 – 2011-03-25 08:02:16