Làm cách nào để triển khai biểu thức if-else này trong erlang?Cách triển khai if-else
if(a == b) {
expression1
} else {
expression2
}
Làm cách nào để triển khai biểu thức if-else này trong erlang?Cách triển khai if-else
if(a == b) {
expression1
} else {
expression2
}
if
a == b ->
expr1;
true ->
exprElse
end
Không có thực khác trong Erlang, bạn chỉ cần phù hợp với sự thật. Thêm thông tin tại Erlang documentation.
Bạn phải chú ý kỹ đến ';' terminator:
if
a == b ->
clauseN,
expr1;
cond2 ->
clause1,
clause2,
expr2;
cond3 ->
expr3;
true ->
exprElse
end
Đó không phải là ngôn ngữ thân thiện với bản sao.
if
A =:= B ->
expr1;
true ->
expr2
end
hoặc
case A =:= B of
true -> expr1;
false -> expr2
end
hoặc
case A of
B -> expr1;
_ -> expr2
end
hoặc
foo(A,B), ...
...
foo(X,X) -> expr1;
foo(_,_) -> expr2.
mẫu phù hợp là một trong những Erlangs nhiều điểm mạnh và nó thường có thể được sử dụng thay cho câu lệnh if. Nó thường dễ đọc hơn đối với đối sánh mẫu trên các đối số hàm hoặc sử dụng một biểu thức trường hợp (cũng phù hợp với mẫu).
Giả sử bạn có hàm some_function
có hai đối số. Nếu các đối số bằng nhau, bạn đánh giá expression1, nếu không bạn sẽ đánh giá expression2. Điều này có thể được diễn tả trong erlang là:
some_function(A, A) -> expression1;
some_function(A, B) -> expression2.
Thật đáng kinh ngạc là bạn có thể đạt được bao nhiêu với kiểu kết hợp mẫu đơn giản này. Với các điều khoản bảo vệ, bạn có thể thể hiện các mẫu phức tạp hơn, ví dụ:
some_function(A, B) when A < B -> expression3.
Một khả năng khác là sử dụng biểu thức case .. of
. Ví dụ cụ thể của bạn sẽ dịch để
case a == b of
true -> expression1;
false -> expression2
end.
(Trong trường hợp này expression2
sẽ luôn luôn được đánh giá từ a
và b
là nguyên tử và không bao giờ bình đẳng với nhau. Biến trong Erlang là chữ hoa.)
Bạn có thể đọc thêm về biểu thức Erlang here.
Tôi cũng khuyên bạn nên sử dụng '=: =' thay thế của '=='. Đây là câu trả lời thực sự tốt - các lập trình viên mới nên luôn sử dụng 'case' cho đến khi họ tìm ra lý do tại sao câu lệnh' if' phải là câu lệnh 'when'. – archaelus
Một tùy chọn khác:
case a of
b -> expr1; %% true
_ -> expr2 %% false
end.
Xem thêm [câu hỏi này] (http://stackoverflow.com/questions/4327860/erlang-equivalent-to-if-else). – legoscia