我有这个if语句
if
A /= B -> ok;
true ->
end.
我希望它在A == B时无效。
答案 0 :(得分:17)
Erlang没有像'void'或'unit'这样的'没有'的概念。我建议返回另一个原子,如not_ok(甚至是void或unit。)
答案 1 :(得分:4)
最好的答案是不要使用if,只是用例。
case A of
B -> ok;
C -> throw({error,a_doesnt_equal_b_or_whatever_you_want_to_do_now})
end
通常ok
或undefined
或noop
作为原子返回,基本上没有任何意义。
答案 2 :(得分:2)
如上所述,任何代码都会返回一些内容。
如果你只想在一个案例中做某事,那么你可以这样写:
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}
或以更“二郎的方式”
%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}.
最后如果您认为如果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.