How to handle nested case

Andreas Schultz andreas.schultz@REDACTED
Mon Sep 20 09:54:55 CEST 2021


Hi,

With the help of https://github.com/eryx67/erlando.git, you can write this
as:

-compile({parse_transform, do}).
-compile({parse_transform, cut}).


get_nas_from_conf() ->
    do([error_m ||
           Server <- get_radius_host(),
           Port <- get_radius_port(),
           Secret <- get_radius_secret(),
           return({Server, Port, Secret})
       ]).


This will return {ok, {Server, Port, Secret}} or {error, Error}.

Regards,
Andreas

Am Sa., 18. Sept. 2021 um 22:50 Uhr schrieb Gian Lorenzo Meocci <
glmeocci@REDACTED>:

> 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 <https://meox.github.io>
>


-- 

Andreas Schultz
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20210920/cc148301/attachment.htm>


More information about the erlang-questions mailing list