2015-12-28 5 views
7

Elixir में _ के साथ किसी भी अप्रयुक्त चर नाम देने का सामान्य नियम है। ऐसा करने से उस चर के लिए कुछ भी बाध्य हो जाता है।इलीक्सिर में "_var" से अधिक "_" का उपयोग करते समय प्रदर्शन प्रभाव?

हालांकि मैंने _tail के रूप में एक अनदेखा तर्क को दर्शाने के लिए अंडरस्कोर के साथ उपसर्ग के व्यापक रूप से उपयोग किए गए पैटर्न को देखा है (इरादे के साथ एक संकेत प्रदान करने के इरादे से)।

इस खोल में एक चेतावनी के माध्यम से भाषा से प्रोत्साहित किया जाता है अगर तुम तो _tail तक पहुँचने का प्रयास:

चेतावनी: रेखांकित चर "_tail" सेट किए जाने के बाद किया जाता है। एक अग्रणी अंडरस्कोर इंगित करता है कि चर के मान को अनदेखा किया जाना चाहिए। यदि इसका इरादा है तो अंडरस्कोर

को हटाने के लिए वैरिएबल का नाम बदलें, लेकिन यहां पकड़ है; _tail में चर के साथ बाध्य है, जबकि केवल _ का उपयोग करते समय यह नहीं है।

क्या इसका मतलब यह है कि _ के अलावा किसी अन्य चीज़ के साथ अनदेखा चर नामकरण करते समय प्रदर्शन प्रदर्शन होता है? या क्या Elixir अभी भी दृश्यों के पीछे _ बांधता है, और पहुंचने के किसी भी प्रयास पर बस त्रुटि?

संपादित करें: ऐसा लगता है कि Erlang संकलक विशेष रूप से _*_ के रूप में इलाज के लिए इस मामले का अनुकूलन और इस तरह वहाँ कोई भूमि के ऊपर, स्रोत है जैसे: http://erlang.org/doc/efficiency_guide/myths.html

+2

"वास्तविक समस्या यह है कि प्रोग्रामर ने गलत जगहों पर और गलत समय पर दक्षता के बारे में चिंता करने में बहुत अधिक समय बिताया है; समयपूर्व अनुकूलन प्रोग्रामिंग में सभी बुराइयों (या कम से कम इसमें से अधिकांश) की जड़ है।" - डोनाल्ड Knuth। प्रदर्शन कोड के बारे में चिंता करें जब आपको अपने कोड में प्रदर्शन के साथ कोई समस्या मिलती है और पहले नहीं। –

+0

@OnorioCatenacci मुझे इस समय प्रदर्शन में सुधार के लिए इसका उपयोग करने के बजाय काम करने के तरीके में अधिक दिलचस्पी है। आम तौर पर मैं आपके द्वारा उपयोग किए गए उद्धरण से सहमत हूं, हालांकि किसी समस्या के बावजूद कुछ चिंता करने की बात नहीं है, यह काम करने के लिए एक अज्ञानी तरीका है। उदाहरण के लिए; मैं शायद इस सवाल का जवाब कभी नहीं सीखूंगा, क्योंकि मुझे संदेह है कि कुछ भी इस बारीकी से प्रदर्शन को देखने की गारंटी देगा। – whitfin

+0

समयपूर्व अनुकूलन वास्तव में काम करने के लिए अज्ञानी तरीका है। लेकिन अगर आप यह समझना चाहते हैं कि यह "हुड के नीचे" कैसे काम करता है - क्यों न केवल एलिक्सीर स्रोत को देखें? –

उत्तर

6

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

+0

वजन घटाने के लिए धन्यवाद। मुझे आशा है कि अंतर्निहित यांत्रिकी से बात करने की अधिक क्षमता वाले किसी व्यक्ति को कोई टिप्पणी या उत्तर मिलेगा। –

5

दरअसल वहाँ Erlang (और इसलिए अमृत) में विशेष व्यवहार है के लिए _ चर। लेकिन जब तक आपको यह नहीं पता कि यह आपके आवेदन के लिए एक प्रदर्शन समस्या है, तो मैं इसके बारे में ज्यादा चिंता नहीं करता। मुझे लगता है कि यदि आप फ़ंक्शन के अंदर कुछ भी दिलचस्प कर रहे हैं तो बाध्यकारी चर के ऊपरी हिस्से को पूरी तरह से महत्वहीन नहीं होगा।

+0

मैं वास्तव में व्यक्तिगत उपयोग के लिए नहीं पूछ रहा हूं, मुझे व्यवहार पैटर्न में अधिक रुचि है - उदा। "_tail" को "_" जैसा ही माना जाता है? – whitfin

+0

बस ध्यान दिया कि मेरी टिप्पणी मार्कडाउन द्वारा कुचली गई थी :) '_tail' ने' _' के समान व्यवहार किया :) – whitfin

+0

नहीं, ऐसा नहीं है। '_tail' बिल्कुल किसी भी अन्य चर (' _' के अलावा) के समान व्यवहार किया जाता है। आप कह सकते हैं कि अग्रणी अंडरस्कोर केवल संकलक चेतावनियों को नियंत्रित करता है। – michalmuskala

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