tôi có điều này nếu tuyên bốErlang: Làm thế nào để "không làm gì" trong ngành thực sự của câu lệnh if
if
A /= B -> ok;
true ->
end.
tôi muốn nó làm nthing khi A == B.
tôi có điều này nếu tuyên bốErlang: Làm thế nào để "không làm gì" trong ngành thực sự của câu lệnh if
if
A /= B -> ok;
true ->
end.
tôi muốn nó làm nthing khi A == B.
Erlang không có khái niệm 'không có gì' như 'khoảng trống' hoặc 'đơn vị'. Tôi sẽ đề nghị trả lại một nguyên tử khác như not_ok (hoặc thậm chí là vô hiệu hoặc đơn vị.)
Câu trả lời hay nhất là không sử dụng nếu, chỉ cần sử dụng.
case A of
B -> ok;
C -> throw({error,a_doesnt_equal_b_or_whatever_you_want_to_do_now})
end
thường ok
hoặc undefined
hoặc noop
được trả về như nguyên tử đó có nghĩa là về cơ bản, không có gì.
Nếu bạn không sử dụng nhánh thứ hai, tại sao không sử dụng' case' và để nó ngoài? 'if' không có chức năng gì cả. – ckruse
@ckruse Bạn không thể bỏ qua vì 'trường hợp', giống như' if', tạo ra lỗi nếu không có mẫu nào phù hợp. Erlang không có giá trị trả về mặc định, bạn luôn phải xử lý mọi trường hợp. – rvirding
@rvirding đúng, không nghĩ về điều đó ;-) – ckruse
Như đã nói, mọi mã sẽ trả lại nội dung nào đó.
Nếu bạn muốn làm một cái gì đó chỉ trong một trường hợp, sau đó bạn có thể viết này:
ok =if
A /= B -> do_something(A,B); % note that in this case do_something must return ok
true -> ok
end.
nếu bạn muốn nhận được những giá trị mới cho A, B, bạn có thể viết những dòng này
{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}
hoặc theo một cách "lệch hướng" hơn
%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}.
nếu bạn mong đợi nó bị treo nếu 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.
Có, mọi thứ luôn trả về giá trị. Bạn không thể trả về một giá trị. – rvirding
trừ khi bạn ném một ngoại lệ và không xử lý nó – chops
tôi không muốn bất kỳ nguyên tử trong trở lại. tôi chỉ cần thực hiện một thao tác khi điều kiện đầu tiên là đúng. – itamar