2008-10-06 14 views
35

पर्ल 6 में समानता ऑपरेटरों का विस्फोट होता है। =:= क्या है? leg और cmp के बीच क्या अंतर है? या eqv और ===?सभी अलग-अलग पर्ल 6 समानता ऑपरेटरों के साथ क्या सौदा है? (==, ===, eq, eqv, ~~, =: =, ...)

क्या किसी के पास कोई अच्छा सारांश है?

+1

आप जानते हैं कि '' ... भी एक वैध ऑपरेटर है किया? –

+2

जटिलता का डर क्यों है? आपको सभी सुविधाओं का उपयोग करने की आवश्यकता नहीं है। जस्ट सीखो कि आपको क्या चाहिए। – Aftershock

उत्तर

36

=:= परीक्षण करता है, तो दो कंटेनर (चर या सरणियों या हैश के आइटम) aliased हैं, यानी साथ ही अगर एक परिवर्तन, अन्य परिवर्तन करता है?

my $x; 
my @a = 1, 2, 3; 
# $x =:= @a[0] is false 
$x := @a[0]; 
# now $x == 1, and $x =:= @a[0] is true 
$x = 4; 
# now @a is 4, 2, 3 

दूसरों के लिए के रूप में: === परीक्षण करता है, तो दो संदर्भों एक ही वस्तु को इंगित, और अगर दो बातें eqv परीक्षण संरचना की दृष्टि से बराबर हैं। तो [1, 2, 3] === [1, 2, 3] गलत होगा (एक ही सरणी नहीं), लेकिन [1, 2, 3] eqv [1, 2, 3] सत्य (समान संरचना) होगी।

leg पर्ल 5 के cmp तरह तार तुलना, जबकि पर्ल 6 के cmp होशियार है और leg तरह <=> की तरह नंबर और तार की तुलना करेंगे।

13 leg 4 # -1, because 1 is smaller than 4, and leg converts to string 
13 cmp 4 # +1, because both are numbers, so use numeric comparison. 

अंत में ~~ "स्मार्ट मैच", यह सवाल का जवाब "$x मैच $y करता है।" यदि $y एक प्रकार है, तो यह प्रकार की जांच है। यदि $y एक रेगेक्स है, तो यह रेगेक्स मैच है - और इसी तरह।

+1

पर्ल 5 में 'eqv' नहीं है। मुझे लगता है कि आप वहां 'cmp' मतलब था। – cjm

17
+0

धन्यवाद, लेकिन मुझे अभी भी समझ में नहीं आता कि = = = करता है। और पैर और सीएमपी के बीच क्या अंतर है? – raldi

+0

जहां तक ​​मुझे पता है, =: = केवल तभी मायने रखता है जब आपने उपनाम असाइन किया है। http://perlgeek.de/blog-en/perl-5-to-6/ cmp के अनुसार अब नाम बदल दिया गया है, इसलिए वे वही होना चाहिए। – Randy

+0

वही नहीं हैं (और मुझे उम्मीद है कि मैंने उस ब्लॉग पर ऐसा नहीं कहा था), सीएमपी पैर की तुलना में "चालाक" है। – moritz

12

क्या Synopsis 3: Comparison semantics में सारांश जो आप चाहते हैं, या आप इसे पहले ही पढ़ रहे थे? डिज़ाइन दस्तावेज़ परीक्षण फ़ाइलों से लिंक करते हैं जहां उन सुविधाओं का उपयोग किया जाता है, ताकि आप उनके उपयोग और उनके वर्तमान परीक्षण स्थिति के उदाहरण देख सकें।

पर्ल 6 की तुलना ऑपरेटर गतिशील भाषा और सभी चीजों पर जाने के लिए अधिक उपयुक्त हैं। तारों या संख्याओं की तुलना करने के बजाय (या चीजों को तारों या संख्याओं में बदलना) के बजाय, अब आप एक ऑपरेटर के साथ चीजों का परीक्षण कर सकते हैं जो आप चाहते हैं। आप मूल्य, कंटेनर, प्रकार, आदि का परीक्षण कर सकते हैं।

टिप्पणियों में से एक में, आप eqv और cmp के बारे में पूछते हैं। पर्ल 5 के पुराने दिनों में, cmp सॉर्टिंग के लिए वहां था और तीन जादू मानों (-1,0,1) में से एक लौटाता था, और यह हमेशा स्ट्रिंग अर्थशास्त्र के साथ करता था। पर्ल 6 में, cmp तीन प्रकार के Order ऑब्जेक्ट्स में से एक लौटाता है, इसलिए आपको याद रखना नहीं है कि -1, 0, या 1 का मतलब क्या है। साथ ही, नया cmp स्ट्रिंग सेमेटिक्स को मजबूर नहीं करता है, इसलिए जब संख्याएं सौंपी जाती हैं तो यह बेहतर हो सकती है (पर्ल 5 के विपरीत जो 1, 10, 11, 2, 20, 21 ... जैसे क्रमबद्ध होगा)।

leg (से एल ईएसएस, qual, जी से reater) स्ट्रिंग अर्थ विज्ञान के साथ cmp है। इसे पर्ल 6 के ~$a cmp ~$b के रूप में परिभाषित किया गया है, जहां ~ नया "स्ट्रिंग संदर्भकर्ता" है जो स्ट्रिंग अर्थशास्त्र को मजबूर करता है। leg के साथ, आप हमेशा पुरानी पर्ल 5 cmp की तरह स्ट्रिंग तुलना कर रहे हैं।

यदि आपके पास अभी भी अन्य ऑपरेटरों पर प्रश्न हैं, तो उन्हें अलग प्रश्नों में विभाजित करें। :)

+0

यह भी देखें http://docs.perl6.org/ - आप वहां व्यक्तिगत ऑपरेटरों को खोज सकते हैं। – Coke

2

यह भी एक आसान संदर्भ गाइड है:

Perl6 Periodic Table of Operators

+1

यह प्रिंट, जबकि प्यारा, spec के वर्तमान संस्करण के साथ अद्यतित नहीं है, पर्ल 6.c – Coke

+0

@ कोक अच्छी तरह से, यह * 2010 में वापस लिखा गया था, लेकिन उत्तरदाता अभी भी एक सक्रिय उपयोगकर्ता है इसलिए मैं चाहता हूं कि वे इसे अद्यतन करें – cat

+0

@tac उत्तर को 'समुदाय विकी' चिह्नित किया गया है ताकि कोई भी इसे संपादित कर सके। या, आप एक टिप्पणी में स्पष्ट कर सकते हैं कि आप किस अपडेट की उम्मीद कर रहे हैं। – Ether

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