<div dir="ltr">Rewrite your get_* functions to throw and do smth. like this:<div><br></div><div>get_nas_from_conf() -><br>    try<br>        {ok, {get_radius_host(), get_radius_port(), get_radius_secret()}}<br>    catch<br>        error:E -><br>            {error, E}<br>    end.</div><div><br></div><div>And don't worry, throw is the simple goto in Erlang.<br><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">сб, 18 сент. 2021 г. в 23:50, Gian Lorenzo Meocci <<a href="mailto:glmeocci@gmail.com">glmeocci@gmail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hi,</div><div>I have a function like this:</div><div><br></div><div><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:"Fira Code","Droid Sans Mono",monospace,monospace,"Droid Sans Fallback";font-weight:normal;font-size:14px;line-height:19px;white-space:pre-wrap"><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:"Fira Code","Droid Sans Mono",monospace,monospace,"Droid Sans Fallback";font-weight:normal;font-size:14px;line-height:19px;white-space:pre-wrap"><div><span style="color:rgb(220,220,170)">get_nas_from_conf</span><span style="color:rgb(212,212,212)">() -></span></div><div><span style="color:rgb(212,212,212)">    </span><span style="color:rgb(197,134,192)">case</span><span style="color:rgb(212,212,212)"> </span><span style="color:rgb(220,220,170)">get_radius_host</span><span style="color:rgb(212,212,212)">() </span><span style="color:rgb(197,134,192)">of</span></div><div><span style="color:rgb(212,212,212)">        {ok, </span><span style="color:rgb(156,220,254)">Server</span><span style="color:rgb(212,212,212)">} -></span></div><div><span style="color:rgb(212,212,212)">            </span><span style="color:rgb(197,134,192)">case</span><span style="color:rgb(212,212,212)"> </span><span style="color:rgb(220,220,170)">get_radius_port</span><span style="color:rgb(212,212,212)">() </span><span style="color:rgb(197,134,192)">of</span></div><div><span style="color:rgb(212,212,212)">                {ok, </span><span style="color:rgb(156,220,254)">Port</span><span style="color:rgb(212,212,212)">} -></span></div><div><span style="color:rgb(212,212,212)">                    </span><span style="color:rgb(197,134,192)">case</span><span style="color:rgb(212,212,212)"> </span><span style="color:rgb(220,220,170)">get_radius_secret</span><span style="color:rgb(212,212,212)">() </span><span style="color:rgb(197,134,192)">of</span></div><div><span style="color:rgb(212,212,212)">                        {ok, </span><span style="color:rgb(156,220,254)">Secret</span><span style="color:rgb(212,212,212)">} -></span></div><div><span style="color:rgb(212,212,212)">                            {</span><span style="color:rgb(156,220,254)">Server</span><span style="color:rgb(212,212,212)">, </span><span style="color:rgb(156,220,254)">Port</span><span style="color:rgb(212,212,212)">, </span><span style="color:rgb(156,220,254)">Secret</span><span style="color:rgb(212,212,212)">};</span></div><div><span style="color:rgb(212,212,212)">                        </span><span style="color:rgb(156,220,254)">E</span><span style="color:rgb(212,212,212)"> -> </span><span style="color:rgb(156,220,254)">E</span></div><div><span style="color:rgb(212,212,212)">                    </span><span style="color:rgb(197,134,192)">end</span><span style="color:rgb(212,212,212)">;</span></div><div><span style="color:rgb(212,212,212)">                </span><span style="color:rgb(156,220,254)">E</span><span style="color:rgb(212,212,212)"> -></span></div><div><span style="color:rgb(212,212,212)">                    </span><span style="color:rgb(156,220,254)">E</span></div><div><span style="color:rgb(212,212,212)">            </span><span style="color:rgb(197,134,192)">end</span><span style="color:rgb(212,212,212)">;</span></div><div><span style="color:rgb(212,212,212)">        </span><span style="color:rgb(156,220,254)">E</span><span style="color:rgb(212,212,212)"> -></span></div><div><span style="color:rgb(212,212,212)">            </span><span style="color:rgb(156,220,254)">E</span></div><div><span style="color:rgb(212,212,212)">    </span><span style="color:rgb(197,134,192)">end</span><span style="color:rgb(212,212,212)">.</span></div></div></div></div><div><br></div><div>Which is the best way to write this kind of function?</div><div><br></div><div>I'd like to have a with operator like in Elixir, to rewrite my function in this way:</div><div><br></div><div><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:"Fira Code","Droid Sans Mono",monospace,monospace,"Droid Sans Fallback";font-weight:normal;font-size:14px;line-height:19px;white-space:pre-wrap"><div><span style="color:rgb(220,220,170)">get_nas_from_conf</span><span style="color:rgb(212,212,212)">() -></span></div><div><span style="color:rgb(212,212,212)">    <span style="color:rgb(212,212,212)"></span><span style="color:rgb(197,134,192)">with</span> {ok, </span><span style="color:rgb(156,220,254)">Server</span><span style="color:rgb(212,212,212)">} <- </span><span style="color:rgb(220,220,170)">get_radius_host</span><span style="color:rgb(212,212,212)">(),</span></div><div><span style="color:rgb(212,212,212)">         {ok, </span><span style="color:rgb(156,220,254)">Port</span><span style="color:rgb(212,212,212)">} = </span><span style="color:rgb(220,220,170)">get_radius_port</span><span style="color:rgb(212,212,212)">(),</span></div><div><span style="color:rgb(212,212,212)">         {ok, </span><span style="color:rgb(156,220,254)">Secret</span><span style="color:rgb(212,212,212)">} = </span><span style="color:rgb(220,220,170)">get_radius_secret</span><span style="color:rgb(212,212,212)">() -></span></div><div><span style="color:rgb(212,212,212)">            {</span><span style="color:rgb(156,220,254)">Server</span><span style="color:rgb(212,212,212)">, </span><span style="color:rgb(156,220,254)">Port</span><span style="color:rgb(212,212,212)">, </span><span style="color:rgb(156,220,254)">Secret</span><span style="color:rgb(212,212,212)">};</span></div><div><span style="color:rgb(212,212,212)">    </span><span style="color:rgb(197,134,192)">catch</span></div><div><span style="color:rgb(212,212,212)">        {error, </span><span style="color:rgb(156,220,254)">_Reason</span><span style="color:rgb(212,212,212)">} = </span><span style="color:rgb(156,220,254)">E</span><span style="color:rgb(212,212,212)"> -></span></div><div><span style="color:rgb(212,212,212)">            </span><span style="color:rgb(156,220,254)">E</span></div><div><span style="color:rgb(212,212,212)">    </span><span style="color:rgb(197,134,192)">end</span><span style="color:rgb(212,212,212)">.</span></div></div></div><div><br></div><div>Any suggestion?</div><div><br></div><div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div>GL<br><a href="https://meox.github.io" target="_blank">https://www.meocci.it</a><br></div></div></div></div></div></div></div>
</blockquote></div>