Ответ 1
У Эрланга нет понятия "ничего", как "пустота" или "единица". Я бы предложил вернуть еще один атом, например not_ok (или даже пустоту или единицу).
У меня есть оператор if
if
A /= B -> ok;
true ->
end.
Я хочу, чтобы он делал nthing, когда A == B.
У Эрланга нет понятия "ничего", как "пустота" или "единица". Я бы предложил вернуть еще один атом, например not_ok (или даже пустоту или единицу).
Лучший ответ - не использовать, если использовать только случай.
case A of
B -> ok;
C -> throw({error,a_doesnt_equal_b_or_whatever_you_want_to_do_now})
end
обычно ok
или undefined
или noop
возвращаются как атомы, которые означают, по существу, ничего.
Как сказано, любой код вернет что-то.
Если вы хотите сделать что-то только в одном случае, вы можете написать это:
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.