In guards it is defined that an exception in the guard means that the guard fails. It has basically been so since the beginning of (erlang) time.<br><br>If you have a guard sequence:<br><br>f(...) when <guard1> ; <guard2> ; ... -><br>
<br>then both failure and an exception in one of the guards means that just that that guard fails and the next is tested, and the clause may still be chosen. See <a href="http://erlang.org/doc/reference_manual/part_frame.html">http://erlang.org/doc/reference_manual/part_frame.html</a>.<br>
<br>This is one point where using a guard sequence differs from using 'or' or 'orelse'. So, while an exception in one guard above means that the next guard is tested, an exception in the following:<br><br>
f(...) when <guard1> orelse <guard2> orelse ... -><br><br>means that the whole guard will fail, and the clause not chosen.<br><br>Robert<br><br><div class="gmail_quote">2009/1/29 Alexander Semenov <span dir="ltr"><<a href="mailto:bohtvaroh@gmail.com">bohtvaroh@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi, folks,<br>
<br>
Can you explain me why exceptions are blocked in guards?<br>
For example I wrote this in erlang shell:<br>
<br>
F = fun(X) when (X == 0) or (X / 0 > 2) -> true; (_) -> false end.<br>
F(0).<br>
false<br>
<br>
Is this cause of 'side effects free' guards nature?<br>
<font color="#888888">--<br>
Alexander Semenov <<a href="mailto:bohtvaroh@gmail.com">bohtvaroh@gmail.com</a>><br>
<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
</font></blockquote></div><br>