Я вижу функции, которые заключают в себе блок приема, называемый рекурсивно, по-видимому, не в положении хвоста по всему месту в примере кода эликсира. Например:Рекурсия хвоста в принимающем блоке
defmodule A do
def loop do
receive do
:ping ->
IO.puts "Received :ping"
loop # <- Tail position?
:pong ->
IO.puts "Received :pong"
loop # <- Also Tail position?
after
5000 ->
loop # <- Also Tail position?
end
loop # <- Also Tail position?
end
end
ли получить специальную конструкцию, которая оптимизирует для хвостовых позиций в конце всех блоков матча? Если это применимо, если блок приема имеет блок after
? Что делать, если есть код после блока приема в функции?
Awesome, спасибо! Эти документы erlang были именно тем, что я искал. – greggreg
Я предполагаю, что то же самое верно для 'case' и т. Д.? Что функция, называемая рекурсивно из условия в 'case', является TCO, при условии, что после блока ничего не вызывается? – kevlarr
Да, это должно применяться и в этих ситуациях. –