How to handle nested case

Fred Hebert mononcqc@REDACTED
Mon Sep 20 15:24:29 CEST 2021


This is timely, because we're trying to land EEP-49:
https://github.com/erlang/otp/pull/5216

Which would turn the original code into:

get_nas_from_conf() ->
  begin
    {ok, Server} <- get_radius_host(),
    {ok, Port} <- get_radius_port(),
    {ok, Secret} <- get_radius_secret(),
    {Server, Port, Secret}
  cond
    {error, _} = E -> E
  end.

The 'cond' keyword is still in the air (the EEP specified 'else' but we hit
an implementation snag).


On Mon, Sep 20, 2021 at 5:05 AM Jesper Louis Andersen <
jesper.louis.andersen@REDACTED> wrote:

> What about something like:
>
> get_nas_from_conf() ->
>   {ok, Server} = get_radius_host(),
>   {ok, Port} = get_radius_port(),
>   {ok, Secret} = get_radius_secret(),
>   {Server, Port, Secret}.
>
> Errors are now just crashes. But if the errors are really truly something
> you want to handle, chances are you need some other flow anyway.
>
> On Sat, Sep 18, 2021 at 10:50 PM Gian Lorenzo Meocci <glmeocci@REDACTED>
> wrote:
>
>> Hi,
>> I have a function like this:
>>
>> get_nas_from_conf() ->
>> case get_radius_host() of
>> {ok, Server} ->
>> case get_radius_port() of
>> {ok, Port} ->
>> case get_radius_secret() of
>> {ok, Secret} ->
>> {Server, Port, Secret};
>> E -> E
>> end;
>> E ->
>> E
>> end;
>> E ->
>> E
>> end.
>>
>> Which is the best way to write this kind of function?
>>
>> I'd like to have a with operator like in Elixir, to rewrite my function
>> in this way:
>>
>> get_nas_from_conf() ->
>> with {ok, Server} <- get_radius_host(),
>> {ok, Port} = get_radius_port(),
>> {ok, Secret} = get_radius_secret() ->
>> {Server, Port, Secret};
>> catch
>> {error, _Reason} = E ->
>> E
>> end.
>>
>> Any suggestion?
>>
>> --
>> GL
>> https://www.meocci.it <https://meox.github.io>
>>
>
>
> --
> J.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20210920/eaa39e35/attachment.htm>


More information about the erlang-questions mailing list