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>