2009-06-08 14 views
22

कार्यान्वित कैसे करें यदि मैं erlang में अन्य अभिव्यक्ति को कार्यान्वित कैसे करूं?अगर अन्यथा

if(a == b) { 
    expression1 
} else { 
    expression2 
} 
+0

भी देखें [इस सवाल] (http://stackoverflow.com/questions/4327860/erlang-equivalent-to-if-else)। – legoscia

उत्तर

31
if 
    a == b -> 
     expr1; 
    true -> 
     exprElse 
end 

वहाँ Erlang में कोई और नहीं असली, तुम सिर्फ सच के साथ मेल है। Erlang documentation पर अधिक जानकारी।

आपको ';' पर ध्यान देना होगा टर्मिनेटर:

if 
    a == b -> 
     clauseN, 
     expr1; 
    cond2 -> 
     clause1, 
     clause2, 
     expr2; 
    cond3 -> 
     expr3; 
    true -> 
     exprElse 
end 

यह कॉपी-पेस्ट अनुकूल भाषा नहीं है।

+0

गुड एक थेंक्स बहुत – Abhimanyu

+0

एरलांग '=: =' में समानता ऑपरेटर नहीं है? – Tommy

+0

यह भी ध्यान दें कि यदि कोई भी स्थिति मेल नहीं खाती है तो यह एक त्रुटि है, इसलिए अंत के रूप में अंतिम खंड के रूप में अंतिम खंड। –

15
if 
    A =:= B -> 
     expr1; 
    true -> 
     expr2 
end 

या

case A =:= B of 
    true -> expr1; 
    false -> expr2 
end 

या

case A of 
    B -> expr1; 
    _ -> expr2 
end 

या

foo(A,B), ... 

... 
foo(X,X) -> expr1; 
foo(_,_) -> expr2. 
19

पैटर्न मिलान erlangs कई शक्तियों में से एक है और यह अक्सर बयान करता है, तो के बजाय इस्तेमाल किया जा सकता। यह फ़ंक्शन तर्कों पर पैटर्न मिलान के लिए अक्सर अधिक पठनीय होता है या केस अभिव्यक्ति का उपयोग करता है (जो पैटर्न मिलान भी है)।

मान लें कि आपके पास एक कार्य some_function है जो दो तर्क लेता है। यदि तर्क बराबर हैं तो आप अभिव्यक्ति 1 का मूल्यांकन करते हैं, अन्यथा आप अभिव्यक्ति 2 का मूल्यांकन करते हैं। इसे एरलांग में व्यक्त किया जा सकता है:

some_function(A, A) -> expression1; 
some_function(A, B) -> expression2. 

यह आश्चर्यजनक है कि आप इस तरह के सरल पैटर्न मिलान के साथ कितना हासिल कर सकते हैं। गार्ड खंड के साथ आप और अधिक जटिल पैटर्न को व्यक्त कर सकते हैं उदाहरण के लिए,

some_function(A, B) when A < B -> expression3. 

एक और संभावना एक case .. of अभिव्यक्ति का उपयोग करने के लिए है। आपका विशिष्ट उदाहरण

case a == b of 
    true -> expression1; 
    false -> expression2 
end. 

लिए अनुवाद होगा (इस मामले में expression2 हमेशा से मूल्यांकन किया जाना है, क्योंकि a और b परमाणुओं कर रहे हैं और एक दूसरे से कभी नहीं के बराबर। Erlang में वैरिएबल अपर केस कर रहे हैं।)

आप पढ़ सकते हैं Erlang अभिव्यक्ति here के बारे में अधिक जानकारी।

+4

मैं इसके बजाय '=: =' का उपयोग करने का सुझाव भी दूंगा '==' का। यह वास्तव में एक अच्छा जवाब है - नए एरलांग प्रोग्रामर को हमेशा 'केस' का उपयोग करना चाहिए जब तक उन्हें पता न लगे कि 'if' कथन 'कब' कथन क्यों होना चाहिए था। – archaelus

8

एक अन्य विकल्प:

case a of 
    b -> expr1; %% true 
    _ -> expr2 %% false 
end. 
संबंधित मुद्दे