Synopsis 2 का कहना है:पर्ल 6 पहचानकर्ता में क्या अनुमति है?
एक पहचानकर्ता अक्षरांकीय वर्णों के किसी भी क्रम के बाद एक अक्षरात्मक चरित्र से बना है। वर्णमाला और संख्यात्मक की परिभाषाओं में उचित यूनिकोड वर्ण शामिल हैं। अंडरस्कोर हमेशा वर्णमाला माना जाता है। एक पहचानकर्ता में पृथक एस्ट्रोफ़ेस या हाइफ़न भी हो सकते हैं बशर्ते अगला वर्ण वर्णमाला हो।
Syntax पर्ल 6 डॉक्स में कहते हैं:
पहचानकर्ता एक व्याकरण निर्माण खंड है कि कई स्थानों में पाए जाते हैं। एक पहचानकर्ता एक आदिम नाम है, और इसे वर्णमाला वर्ण (या अंडरस्कोर) से शुरू करना चाहिए, उसके बाद शून्य या अधिक शब्द वर्ण (वर्णमाला, अंडरस्कोर या संख्या) के साथ शुरू होना चाहिए। आप बीच में डैश - या सिंगल कोट्स को भी एम्बेड कर सकते हैं, लेकिन दो पंक्तियों में नहीं।
शब्द "उचित यूनिकोड चरित्र" शब्द से पूछता है कि हम जानते हैं कि क्या उचित है।
मुझे लगता है कि अगर मैं ASCII वर्णों से परे चुनने जा रहा हूं तो मुझे बहुत अस्पष्ट होना चाहिए। मैं Perl6 :: व्याकरण में यह उत्पादन, लेकिन नहीं <.ident>
के लिए परिभाषा:
token identifier {
<.ident> [ <.apostrophe> <.ident> ]*
}
लेकिन यह भी प्रश्न को पता है कि एक पहचानकर्ता एक पहचानकर्ता परिभाषित करने के लिए है कि आपके पास भीख माँगता। तो, <.ident>
कहां है?
raiph बताते हैं कि <.ident>
QRegex::Cursor
में ident
तरीका है, लेकिन है कि nqp::const::CCLASS_WORD
के मामले में यह परिभाषित करता है। अब मुझे इसे ट्रैक करना होगा।
मैं क्योंकि मैं एक महंगी वर्ग आपरेशन के परिणाम के आसपास पारित करने के लिए चाहते थे U + 00B2 (सुपरस्क्रिप्ट दो) (सामान्य श्रेणियों नहीं है, Other_Number) का उपयोग करने की कोशिश की, और हे, पर्ल 6 यह अनुमति देने के लिए माना जाता है:
my $a² = $a**2;
लेकिन, यह पता चला है कि ², अन्य सुपरस्क्रिप्ट के साथ, ऑपरेटर हैं। यह ठीक है, लेकिन ² है और तरह listed as an operator या Int
में या व्यवहार Int
inherits नहीं हैं:
$ perl6 -e 'my $Δ² = 6; say $*PERL; say $Δ²'
Use of uninitialized value of type Any in numeric context in block <unit> at -e line 1
Cannot modify an immutable Int
in block <unit> at -e line 1
$ perl6 -e 'my $Δ = 6; say $*PERL; say $Δ²'
Perl 6 (6.c)
36
$ perl6 -e 'my $Δ = 6; say $*PERL; say $Δ³'
Perl 6 (6.c)
216
$ perl6 -e 'my $Δ = 6; say $*PERL; say $Δ⁹'
Perl 6 (6.c)
10077696
लेकिन मैं उपयोग नहीं कर सकते साढ़े U + 00BD (अशिष्ट अंश एक आधा) (कोई के जनरल श्रेणियों और Other_Number):
$ perl6 -e 'my $Δ½ = 6; say $*PERL; say $Δ½'
===SORRY!=== Error while compiling -e
Bogus postfix
at -e:1
------> my $Δ⏏½ = 6; say $*PERL; say $Δ½
expecting any of:
constraint
infix
infix stopper
postfix
statement end
statement modifier
statement modifier loop
लेकिन, क्या हुआ अगर मैं $Δ
में एक नंबर डाल नहीं है?
$ perl6 -e 'my $Δ = "foo"; say $*PERL; say $Δ²'
Cannot convert string to number: base-10 number must begin with valid digits or '.' in '⏏foo' (indicated by ⏏)
ब्लॉक में -e लाइन पर -e लाइन 1
Actually thrown at:
ब्लॉक में
पर
मुझे चिंता है कि किसी को एक पोस्टफ़िक्स ऑपरेटर को परिभाषित भाषा को तोड़ सकते थे था, लेकिन इस लिए लगता है कार्य:
$ perl6 -e 'multi sub postfix:<Δ>(Int $n) { 137 }; say 6Δ;'
137
$ perl6 -e 'multi sub postfix:<Δ>(Int $n) { 137 }; my $ΔΔ = 6; say $ΔΔ;'
6
$ perl6 -e 'multi sub postfix:<Δ>(Int $n) { 137 }; my $Δ = 6; say $ΔΔ;'===SORRY!=== Error while compiling -e
Variable '$ΔΔ' is not declared
at -e:1
------> fix:<Δ>(Int $n) { 137 }; my $Δ = 6; say ⏏$ΔΔ;
तो, वहां क्या चल रहा है?
सुपरस्क्रिप्ट में आपरेशन के रूप में सूचीबद्ध हैं यानी ऑनलाइन पहचानकर्ता अनुभाग: [पहचानकर्ता] (https://docs.perl6.org/language/syntax#Identifiers)। – callyalater
सुपरस्क्रिप्ट अब सूचीबद्ध हैं, लेकिन जब मैंने इस सवाल से पूछा तो वे नहीं थे। एक हटाए गए उत्तर संदर्भ https://github.com/perl6/doc/issues/1098 उस मुद्दे के रूप में जो इसे नोट किया गया है। –