Re: How to handle nested case

Gian Lorenzo Meocci <[email protected]>
Newsgroups gmane.comp.lang.erlang.general
Message-ID <CAAPjnHXzhFax7PT+MhaFej-k3KCY41KdYkKu5YShVLoZnfgF6Q@mail.gmail.com>
the proposal and the implementation are pieces of art!
Thanks for your work.

On Sun, 19 Sept 2021 at 17:02, Gian Lorenzo Meocci <[email protected]>
wrote:

> Thanks a lot for the link!
>
> On Sun, 19 Sept 2021 at 16:40, Paulo F. Oliveira <
> [email protected]> wrote:
>
>> Hi, Gian.
>>
>> You might be interested in reading [1], first shown to the Erlang world
>> in [2] (there's more info. in the archives, if you search).
>>
>> FYI, it is being hacked away, at this very moment, in SpawnFest 2021:
>> https://github.com/spawnfest/eep49ers.
>>
>> Cheers.
>>
>> - Paulo F. Oliveira
>>
>> [1] https://github.com/erlang/eep/blob/master/eeps/eep-0049.md
>> [2] http://erlang.org/pipermail/eeps/2018-September/000554.html
>>
>> On Sun, 19 Sept 2021 at 14:37, Gian Lorenzo Meocci <[email protected]>
>> wrote:
>>
>>> I think that there isn't a generic solution for this problem. It’s time
>>> to introduce the 'with' operator in Erlang 😂
>>>
>>> Il Dom 19 Set 2021, 09:06 Attila Rajmund Nohl <[email protected]>
>>> ha scritto:
>>>
>>>> Hello!
>>>>
>>>> One way (I haven't actually tried to compile this, but hopefully you
>>>> get the idea):
>>>>
>>>> get_nas_from_conf() ->
>>>>   try
>>>>     {ok, Server} = get_radius_host(),
>>>>     {ok, Port} = get_radius_port(),
>>>>     {ok, Secret} = get_radius_secret(),
>>>>     {Server, Port, Secret};
>>>>   catch
>>>>     error:{badmatch, E} ->
>>>>       E
>>>> end.
>>>>
>>>> Of course, if the badmatch comes from the get_* functions, this
>>>> construct might catch that too, but you might be able to  ensure this
>>>> doesn't happen.
>>>>
>>>> Gian Lorenzo Meocci <[email protected]> ezt írta (időpont: 2021.
>>>> szept. 18., Szo, 22:50):
>>>> >
>>>> > 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
>>>>
>>>
>
> --
> GL
> https://www.meocci.it <https://meox.github.io>
>


-- 
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.