2012-09-11 17 views
14

शैली 1:जो अधिक बेहतर है? गार्ड या मामला?

a(X) when X>1 -> 
    ...omitted; 
a(X) when X -> 
    ...omitted. 

शैली 2

a(X) -> 
    case X>1 of 
     true-> ...ommited; 
     false-> ...ommited 
    end. 

==== अद्यतन ===

@rviding के रूप में कहा, मैं निम्नलिखित के रूप में तुलना अद्यतन:

शैली 1:

a(X) when X>1 -> 
    ...omitted; 
a(X) -> 
    ...omitted. 

शैली 2

a(X) -> 
    case X>1 of 
     true-> ...ommited; 
     false-> ...ommited 
    end. 

उत्तर

14

Learn You Some Erlang's section on function syntax कहा गया है कि खंड और मामले बयान में कार्य मूलतः एक ही, एक अंतर के अलावा हैं: खंड में पैटर्न मिलान, एक से अधिक पैटर्न संभाल कर सकते हैं, जबकि एक मामला बयान केवल एक बयान संभाल कर सकते हैं।

इसके अलावा, मेरा मानना ​​है कि यह स्वाद का विषय है। जब मामले वास्तव में अलग होते हैं तो मैं अलग-अलग फ़ंक्शन क्लॉज का उपयोग करता हूं (जैसा कि: पूर्ण फ़ंक्शन अलग-अलग व्यवहार करेगा), और जब मैं कोड को अलग करना चाहता हूं और बाद में विलय कराना चाहता हूं, तो मैं केस स्टेटमेंट का उपयोग करता हूं, उदा। अभिव्यक्ति के आधार पर एक चर के लिए मान की गणना करने के लिए।

संपादित के रूप में नीचे टिप्पणी में RobertAloi से कहा, क्या तुम सच में जब case .. of का उपयोग कर ही सीमित नहीं हैं। साथ ही, जैसा कि rvirding लिखा था, संकलक कुछ अनुकूलन करता है जब टुपल में अलग-अलग अभिव्यक्तियों को लपेटते हैं ताकि उनके खिलाफ मिलान की अनुमति मिल सके।

+0

धन्यवाद। मैं व्यक्तिगत रूप से कार्य खंडों में पड़ता हूं क्योंकि यह अधिक स्पष्ट है। आपकी सलाह मुझे निर्णय लेने के लिए काफी अच्छी है। – goofansu

+4

फंक्शन क्लॉज डीबग करने के लिए भी बेहतर हैं क्योंकि आप उन पर – Lukas

+2

@goofansu का पता लगा सकते हैं लेकिन इस मामले में 'एक्स' गार्ड से बचें। यह केवल तभी सफल होगा जब 'एक्स' का मान' सत्य 'हो। – rvirding

6

आपको यह भी विचार करना चाहिए कि बीआईएफ के परिणाम की जांच करने से किसी फ़ंक्शन के अंदर गार्ड में सटीक व्यवहार नहीं होता है।

मैंने हाल ही में यह सीखा, उदाहरण के लिए (length(L) > -1) फ़ंक्शन के अंदर दुर्घटनाएं, लेकिन जब एक अनुचित सूची है तो गार्ड में नहीं।

+0

चेतावनी के लिए धन्यवाद – goofansu

संबंधित मुद्दे