मैं मानचित्र
साथ खेल रहा हूँ इस व्यवहार के बारे में Map
नहीं है एस और अन्य Associative
पर लागू होता है, जैसे Baggy
एस और Setty
एस।
मुझे उस मामले में एक सूची क्यों मिलती है और $ m < < 1 >> मामले नहीं?
क्योंकि चर एक से अधिक कुंजी हो सकती है कि:
my $m = Map.new: '1' => :1st, '2' => :2nd;
my $n = '1 2';
dd $m«$n» # OUTPUT: «(:st(1), :nd(2))»
तो आश्चर्य को रोकने के लिए, यह हमेशा वापस आने वाले List
। अन्यथा आप जो सामान प्राप्त करेंगे वह वैरिएबल की सामग्री के आधार पर अलग-अलग होगा। यह बहुत ही समस्याग्रस्त होगा, if %foo«$n»:exists { … }
ठीक काम करेगा जब $n
में कोई सफेद जगह नहीं है और उपयोगकर्ता को लगता है कि उनके कोड में कोई समस्या नहीं है, लेकिन तब अचानक अचानक True
$n
में व्हाइटस्पेस होता है।
आप चर की सामग्री को चाहते हैं हमेशा दोहरे उद्धरण चिह्नों के साथ बोली, एक आइटम के रूप में अंतर्वेशित करने जा यह है, या यह सूचकांक करने के लिए घुंघराले ब्रेसिज़ का उपयोग करें। इस मामले चर में खाली स्थान के पर कोई निर्भरता है के रूप में, आप एक List
के बजाय एक ही आइटम मिलता है:
my $m = Map.new: '1' => :1st, '2' => :2nd;
my $n = '1';
dd $m«"$n"».^name; # OUTPUT: «"Pair"»
dd $m{$n}.^name; # OUTPUT: «"Pair"»
और, एक बार मैं सूची है, मैं इसे करने के लिए एक और सबस्क्रिप्ट श्रृंखला में असमर्थ लग रहे हैं:
यह एक बग है। मैंने इसे RT#131341 के रूप में दायर किया।इस दौरान, आप यह कोष्ठक ($m«$n»)[0]
में बात enclosing या .head
का उपयोग करके वैकल्पिक हल कर सकते हैं: $m«$n».head
और में विसंगति के बारे में ओपी पर क्रिस्टोफ की टिप्पणी को संबोधित करने के:
say <<1>>.^name # IntStr
my $n = 1;
say <<$n>>.^name # Slip
say <<1 2>>.^name # List
पहले एक एक allomorph है, क्योंकि आपके पास सब कुछ है।
चर के साथ दूसरे मामले अनुक्रमण मामले के लिए के रूप में ही तर्क है: यदि आप एक Slip
(एक List
के उपवर्ग) मिलता है क्योंकि चर एक से अधिक आइटम हो सकती है और आप संकलक बता सकते हैं आप केवल एक आइटम चाहते हैं द्वारा डबल के हवाले से कि स्ट्रिंग:
:
my $n = '42';
dd «"$n"».^name; # OUTPUT: «"IntStr"»
और अंत में, चर एक Slip
तो में बदल गया हो बाहरी Iterable
में है कि यह चपटा हो जाता है, तो यह है कि «…»
में चर interpolating आप एक फ्लैट सूची देना होगा 0
कोई अन्य ((संयुक्त) संबंधित?) असंगतता: '<<1>>^^ नाम # IntStr' बनाम मेरा $ n = 1; <<$n>>^^ नाम # पर्ची 'बनाम' <<1 2>>^^ नाम # सूची' – Christoph
इस बारे में कुछ और सोचने के बाद और मुझे समस्या दिखाने वाले व्यक्ति से बात करने के बाद, मुझे लगता है कि '$ m <<1>> 'वापस आना चाहिए सूची भी तब चीजें समझ में आ जाएंगी। यदि यह एक इंट्सट्र की सूची है, तो यह ठीक है। –