2009-06-08 29 views
22

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 
} 
+0

Xem thêm [câu hỏi này] (http://stackoverflow.com/questions/4327860/erlang-equivalent-to-if-else). – legoscia

Trả lời

31
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.

+0

Gud one thanx rất nhiều – Abhimanyu

+0

không phải là toán tử bình đẳng trong Erlang '=: ='? – Tommy

+0

Cũng lưu ý rằng đó là lỗi nếu không có điều kiện nào khớp với nhau, do đó mệnh đề thực sự là kết thúc khi kết thúc. –

15
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. 
19

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ừ ab 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.

+4

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

8

Một tùy chọn khác:

case a of 
    b -> expr1; %% true 
    _ -> expr2 %% false 
end.