2015-07-07 6 views
10

के साथ शुरू करने का क्या अर्थ है, मैं पावरशेल एक लाइनर स्क्रिप्ट में आया हूं जिसके लिए पहला अक्षर एक + (प्लस) चिह्न है और मैं सोच रहा था कि क्या है ऐसा करने का मतलब है।पावरशेल एक लाइनर को + (प्लस) साइन

उदाहरण है कि चरित्र के लिए 'ए' यूनिकोड कोड बिंदु दे देंगे:

+'A'[''] 

उत्तर

16

एक unary +int32 प्रकार के लिए एक निहित कलाकार के रूप में काम करता है।

पार्सर बस दाएं हाथ की ओर एक पूर्णांक में मूल्य को बदलने की कोशिश करेगा।

+'A'[''] 

के "tokenize" उस बयान की कोशिश करते हैं:

के देखो (और के माध्यम से कदम) अपने बयान, बहुत पार्सर चाहेंगे

+ 'A' [ '' ] 
^^^^^ 
| | | | | 
| | | | Array index close operator 
| | | Empty string 
| | Array index open operator 
| Literal string of length 1 with value A 
Unary + operator 

आदेश है कि क्या पता करने के लिए हम + ऑपरेटर लागू कर सकते हैं, हमें दाएं हाथ के तर्क का मूल्यांकन करने की आवश्यकता होगी:

'A'[''] 

एकमात्र तरीका हम एक स्ट्रिंग (जैसे कि 'A') में अनुक्रमित कर सकते हैं, इसे char[] के रूप में इलाज कर रहा है, और [ और ] ऑपरेटर के बीच एक पूर्णांक मूल्य प्रदान कर रहा है। एक खाली स्ट्रिंग अपने आप में एक पूर्णांक नहीं है, लेकिन जब पूर्ण रूप से एक में परिवर्तित हो जाती है, तो यह 0 बन जाती है (कार्रवाई में देखने के लिए शक्तियों में [int]"" या '' -as [int] आज़माएं)। अब बयान अधिक इस तरह दिखता है:

'A'[0] 

सूचकांक 0 में यह स्पष्ट रूप से charA है, और इतना है कि अब हमारे दाएँ हाथ के तर्क, चरित्र अपरकेस ए

अब हम एकल + लागू है और voila, हम चार A के लिए संबंधित ASCII मान प्राप्त करते हैं, जो 65 होता है।

हम इसी तरह से किया जा सकता था किया है:

+("A" -as [char]) 

या, Briantist के उदाहरण का उपयोग करते हुए:

"A" -as [char] -as [int] 

क्या तुमने कभी आश्चर्य है कि कैसे पार्सर व्यक्ति टोकन में एक निश्चित बयान विभाजन हैं, का उपयोग करें [PSParser]::Tokenize() विधि:

PS C:\> $errors = @() 
PS C:\> $script = "+'A'['']" 
PS C:\> $tokens = [System.Management.Automation.PSParser]::Tokenize($script,[ref]$errors) 
PS C:\> $tokens | select Content, Type 
Content  Type 
-------  ---- 
+  Operator 
A   String 
[  Operator 
      String 
]  Operator 
+2

टोकनिज पर हैंडी टिप; धन्यवाद! –

5

यह code golfing में प्रयोग किया जाता है एक संख्या में बदलने के लिए। यह [int] से छोटा है।

[''] का महत्व यह है कि स्क्वायर ब्रैकेट का उपयोग स्ट्रिंग से [char] प्राप्त करने के लिए किया जा रहा है। '' एक खाली स्ट्रिंग को 0 में घुमाया जा रहा है।

पूछताछकर्ता एक विशिष्ट समस्या के समाधान का जिक्र कर रहा है, जहां प्रतिबंधों में से एक यह था कि 0 से 9 अंकों के उत्तर का जवाब नहीं दिया जा सका।

PowerShell One-Liner Contest 2015 और the explanation of this (rather brilliant) solution from the winner देखें।

+0

'[' ']' का महत्व क्या है क्योंकि ओप्स उदाहरण – Matt

+0

'ए' [''] में 'ए' [0] जैसा ही आवश्यक है, जो 'ए' स्ट्रिंग का पहला अक्षर है। । मुझे लगता है कि कोड गोल्फ अंकों की अनुमति नहीं दे रहा है, और यह शॉर्टकट था। इंक में बदलते समय खाली तार 0 में परिवर्तित हो जाते हैं। –

+0

@ माइक शेपर्ड मैं इसे अभी प्राप्त करता हूं .... यह इसे 'char' में परिवर्तित करता है। DIDnt पहले समझ में आता है ... और अपडेट का उल्लेख है कि अब – Matt

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