Re: How to handle nested case

Michael Truog <[email protected]>
Newsgroups gmane.comp.lang.erlang.general
Message-ID <[email protected]>
I have used (from 
https://github.com/CloudI/CloudI/blob/a43715b71facafc9a8ad7c7fe55c7383773c22df/src/lib/cloudi_core/src/cloudi_core_i_configuration.erl#L6022-L6039):
-type eval_value() :: number() | atom() | list(). -spec eval(L :: 
list({eval_value(), fun((eval_value()) -> {ok, any()} | {error, 
any()})})) -> tuple(). eval(L) -> eval(L, []). eval([], Output) -> 
erlang:list_to_tuple([ok | lists:reverse(Output)]); eval([{Value, F} | 
L], Output) when is_number(Value) orelse is_atom(Value) orelse 
is_list(Value) -> case F(Value) of {ok, ValueNew} -> eval(L, [ValueNew | 
Output]); {error, _} = Error -> Error end.

However, the eval function above is assuming each function in the 
2-tuple list is taking a value it is paired with as input.  The return 
tuple has the 'ok' atom to show it is a success case.  For your 
situation, you wouldn't need an input value for your function values (so 
only a list of function values would be necessary).

Best Regards,
Michael

On 9/18/21 10:14 AM, Gian Lorenzo Meocci wrote:
> Hi,
> I have a function like this:
>
> get_nas_from_conf() ->
> caseget_radius_host() of
> {ok, Server} ->
> caseget_radius_port() of
> {ok, Port} ->
> caseget_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>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.