Re: How to handle nested case

Gian Lorenzo Meocci <[email protected]>
Newsgroups gmane.comp.lang.erlang.general
Message-ID <CAAPjnHV6CTrmh45QhGo+J9Qd6rTNjYzcsM-321nZ4-FEx4sv=A@mail.gmail.com>
Hi Fred,
this is a good news because it's generic and rooted in the language!

Do you have any timing estimation to have it in the main branch?
Thanks a lot

On Mon, 20 Sept 2021 at 15:24, Fred Hebert <[email protected]> wrote:

> 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 <
> [email protected]> 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 <[email protected]>
>> 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.
>>
>

-- 
GL
https://www.meocci.it <https://meox.github.io>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.