Hi<div><br></div><div>It is better to return Value, because you can use this value in HOFs:<div>fun2(fun1()).</div><div>And if an error was occurred, just skip it.</div><div>For example, </div><div><br></div><div>avg(L) when is_list(L) -> lists:sum(L) / erlang:length(L).</div>
<div><br></div><div>This function will fail for []. Let it crash.</div><div><span class="Apple-style-span"><br class="Apple-interchange-newline">For {ok, Value} you</span><span class="Apple-style-span"> should</span><span class="Apple-style-span"> check</span><span class="Apple-style-span"> </span><span class="Apple-style-span">always</span> the returned value:</div>
<div>{ok, Value} = re:compile("test").</div><div><br></div><div><br></div><div>BIFs and NIFs return {ok, Value} or {error, Reason}, because it is only one way to return the reason of the error from C-code. There is no the throw() construction for NIFs. There is only error:badarg, which is not always helpful. For example, the function ets:lookup_element/3 can throw error:badarg when first argument is not a table id or if there is no an entry.</div>
<div><br></div><div><br>-- <br>Best regards,<br>Uvarov Michael</div>
</div>