Re: How to handle nested case
Gian Lorenzo Meocci <[email protected]>
| Newsgroups | gmane.comp.lang.erlang.general |
|---|---|
| Message-ID | <CAAPjnHVXD3d4e2KAvaUQc-aaD66SJVv6zwc8cGNr2BK00O9R8w@mail.gmail.com> |
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>