How to handle nested case

Attila Rajmund Nohl attila.r.nohl@REDACTED
Sun Sep 19 09:06:40 CEST 2021


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 <glmeocci@REDACTED> 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


More information about the erlang-questions mailing list