Re: How to handle nested case
"Paulo F. Oliveira" <[email protected]>
| Newsgroups | gmane.comp.lang.erlang.general |
|---|---|
| Message-ID | <CA+dV7cQvH_2Dtu3KfydSgqDHMMRs16p2Nc8QLCox9sb_3Bm2xg@mail.gmail.com> |
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 >> >