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.
3条答案
按热度按时间slmsl1lt1#
Erlang没有
void
或unit
这样的nothing
概念,我建议返回另一个原子,比如not_ok
(或者甚至void
或unit
)。uttx8gqw2#
最好的答案是不要使用if,只使用case。
典型地,
ok
或undefined
或noop
作为原子返回,其基本上意味着什么也没有。gajydyqb3#
如前所述,任何代码都会返回一些东西。
如果你只想在一种情况下做某件事,那么你可以这样写:
如果你想得到A,B的新值,你可以写
或以一种更“爱尔朗的方式”
如果A == B,则会崩溃