Подтвердить что ты не робот

Erlang: как "ничего не делать" в истинном выражении оператора if

У меня есть оператор if

if 
    A /= B -> ok;
    true ->
end.

Я хочу, чтобы он делал nthing, когда A == B.

4b9b3361

Ответ 1

У Эрланга нет понятия "ничего", как "пустота" или "единица". Я бы предложил вернуть еще один атом, например not_ok (или даже пустоту или единицу).

Ответ 2

Лучший ответ - не использовать, если использовать только случай.

case A of
   B -> ok;
   C -> throw({error,a_doesnt_equal_b_or_whatever_you_want_to_do_now})
end

обычно ok или undefined или noop возвращаются как атомы, которые означают, по существу, ничего.

Ответ 3

Как сказано, любой код вернет что-то.

Если вы хотите сделать что-то только в одном случае, вы можете написать это:

ok =if 
    A /= B -> do_something(A,B); % note that in this case do_something must return ok
    true -> ok
end.

если вы хотите получить новые значения для A, B, вы можете написать это

{NewA,NewB} = if 
    A /= B -> modify(A,B); % in this case modify returns a tuple of the form {NewA,NewB}
    true -> {A,B} % keep A and B unchanged 
end.
% in the following code use only {NewA,NewB}

или более "erlang way"

%in your code
...
ok = do_something_if_different(A,B),
{NewA,NewB} = modify_if_different(A,B),
...

% and the definition of functions
do_something_if_different(_A,_A) -> ok;
do_something_if_different(A,B) ->
    % your action
    ok.

modify_if_different(A,A) -> {A,A};
modify_if_different(A,B) ->
    % insert some code
    {NewA,NewB}.

last, если вы ожидаете, что он сработает, если A == B

%in your code
...
ok = do_something_if_different_else_crash(A,B),
...


% and the definition of functions
do_something_if_different_else_crash(A,B) when A =/= B ->
    % your action
    ok.