Med*_*her 13 erlang recursion case tail
假设我在这里有这个代码:
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.
Run Code Online (Sandbox Code Playgroud)
现在,理论上这是尾递归的,因为对do_recv_loop的三次调用都不需要返回任何内容.但是,erlang会认识到这是尾递归并适当优化吗?我担心嵌套结构可能使它无法识别它.
nmi*_*els 16
是的,它会的.Erlang需要优化尾调用,这显然是尾调用,因为调用函数后没有任何反应.
我曾经希望tailcall
在Erlang中有一个关键字,所以编译器可以警告我无效使用,但后来我习惯了.
归档时间: |
|
查看次数: |
772 次 |
最近记录: |