가 나는이 부분을 이해하지 못하는 http://learnyousomeerlang.com/errors-and-exceptionstry catch 블록에 tail 재귀 코드가 없습니까?
에서 얼랑 교훈을 읽고있다 :
익스프레션 시도 사이의에하는 것은 보호 할 수 있다고한다. 즉, 해당 호출 내에서 발생하는 모든 종류의 예외가 잡히게됩니다.
그리고
예외의 보호 된 부분은 꼬리 재귀가 될 수 없습니다. 의와 캐치 사이에 재귀 호출을 둬서
[...]
, 당신은 보호 된 부분에없는 당신은 마지막 통화 최적화 도움이됩니다.
따라서 예외가 발생하는 부분에는 재귀 호출을 넣을 수 없습니까? 그러면 try catch 블록의 핵심은 무엇입니까?
그리고 페이지에 우리가 보호 된 섹션의 꼬리 재귀 함수의 예를 아래에
...has_value(Val, Tree) ->
try has_value1(Val, Tree) of
false -> false
catch
true -> true
end.
has_value1(_, {node, 'nil'}) ->
false;
has_value1(Val, {node, {_, Val, _, _}}) ->
throw(true);
has_value1(Val, {node, {_, _, Left, Right}}) ->
has_value1(Val, Left),
has_value1(Val, Right).
그는 우리가 함수에 꼬리 재귀 코드를 래핑하는 함수를 사용할 필요가 있음을 의미 하는가 우리가 시험 잡을 때 보호받는 부분에있을 때?