私はこの部分を理解していないhttp://learnyousomeerlang.com/errors-and-exceptionstry catchブロックにテール再帰コードはありませんか?
でErlangのレッスンを読んでいます:
試し間の中での発現が保護されると言われています。これは、その呼び出し内で起こっているあらゆる種類の例外がキャッチされることを意味します。
そして
例外の保護された部分は、末尾再帰にすることはできません。
[...]
のとキャッチの間に、あなたの再帰呼び出しを置くことによって、あなたは保護された部分ではありません、あなたは最後の呼び出しの最適化の恩恵を受ける。
したがって、例外がキャッチされた部分に再帰呼び出しを入れることはできませんか? 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).
彼は我々が関数に末尾再帰のコードをラップする機能を使用する必要があることを意味しています私たちがtry catchの保護された部分にいるときは?