Re: How to handle nested case
Igor Clark <[email protected]>
| Newsgroups | gmane.comp.lang.erlang.general |
|---|---|
| Message-ID | <[email protected]> |
Just read it all through and totally agree, this is really very elegant. Lovely to see. If all goes well, is there a rough guideline for how long it would take for this extension to appear in mainline releases? (If that’s the plan!) Thanks! > On 19 Sep 2021, at 16:35, Gian Lorenzo Meocci <[email protected]> wrote: > > > 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 > > > -- > GL > https://www.meocci.it