Re: How to handle nested case
Fred Hebert <[email protected]>
| Newsgroups | gmane.comp.lang.erlang.general |
|---|---|
| Message-ID | <CAFA3VZL0_+SWM_f529K4rhReCx5wJuuUQisUs2yr3Nc6JX3MBw@mail.gmail.com> |
This is timely, because we're trying to land EEP-49:
https://github.com/erlang/otp/pull/5216
Which would turn the original code into:
get_nas_from_conf() ->
begin
{ok, Server} <- get_radius_host(),
{ok, Port} <- get_radius_port(),
{ok, Secret} <- get_radius_secret(),
{Server, Port, Secret}
cond
{error, _} = E -> E
end.
The 'cond' keyword is still in the air (the EEP specified 'else' but we hit
an implementation snag).
On Mon, Sep 20, 2021 at 5:05 AM Jesper Louis Andersen <
[email protected]> wrote:
> What about something like:
>
> get_nas_from_conf() ->
> {ok, Server} = get_radius_host(),
> {ok, Port} = get_radius_port(),
> {ok, Secret} = get_radius_secret(),
> {Server, Port, Secret}.
>
> Errors are now just crashes. But if the errors are really truly something
> you want to handle, chances are you need some other flow anyway.
>
> On Sat, Sep 18, 2021 at 10:50 PM Gian Lorenzo Meocci <[email protected]>
> wrote:
>
>> 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>
>>
>
>
> --
> J.
>