2008-09-22 14 views
11

पावरशेल निश्चित रूप से गतिशील भाषाओं की श्रेणी में है, लेकिन क्या इसे दृढ़ता से टाइप किया जाएगा?क्या PowerShell एक दृढ़ता से टाइप की गई भाषा है?

+2

शब्द "दृढ़ता से टाइप किया गया" परिभाषित नहीं किया गया है। क्या आप इसे परिभाषित कर सकते हैं, ताकि आपके प्रश्न का उत्तरदायी उत्तर दिया जा सके? अन्यथा हर कोई सिर्फ अपनी * परिभाषा को प्रतिस्थापित करेगा और हम बड़े पैमाने पर ज्वालामुखी में खत्म हो जाएंगे। –

+0

आपका मतलब है: PowerShell * स्थिर रूप से * टाइप किया गया है? –

उत्तर

5

यदि आपको इसकी आवश्यकता हो तो यह हो सकता है।

तो जैसा

:

[1] » [int]$x = 5 
[2] » $x 
5 
[3] » $x = 'haha' 
Cannot convert value "haha" to type "System.Int32". Error: "Input string was not in a correct format." 
At line:1 char:3 
+ $x <<<< = 'haha' 
[4] » 

इंगित करने के लिए यदि आप के बारे में चर दृढ़ता से टाइप किया जा रहा परवाह [प्रकार] अंकन का प्रयोग करें।

संपादित:

edg के रूप में कहे अनुसार, इस व्याख्या से PowerShell को नहीं रोकता है "5" एक पूर्णांक, जब क्रियान्वित करने के रूप में (5 + "5")। मैंने थोड़ा और खोला, और Windows PowerShell in Action में ब्रूस पेटेट के अनुसार, पावरशेल वास्तव में एक "प्रकार-विशिष्ट भाषा" है। तो, मुझे लगता है, मेरा जवाब "तरह का है।"

+0

नहीं। आप एक पूर्णांक में एक स्ट्रिंग जोड़ सकते हैं और एक संख्यात्मक परिणाम प्राप्त कर सकते हैं। यदि आप जोड़ के क्रम को उलट देते हैं तो आपको concatenation मिल जाता है। –

+0

मुझे लगता है कि इससे पता चलता है कि यह * स्थिर रूप से टाइप किया जा सकता है जिसका मतलब यह नहीं है कि यह * दृढ़ता से टाइप किया जाना चाहिए। – EBGreen

+0

तो, यह कमजोर और स्थिर रूप से टाइप किया गया है? –

1

तकनीकी रूप से यह एक दृढ़ता से टाइप की गई भाषा है।

आप शैल में प्रकार घोषित करने के लिए अस्वीकार कर सकते हैं, जिससे यह गतिशील टाइप की गई स्क्रिप्टिंग भाषा की तरह व्यवहार कर सकता है, लेकिन यह "PsObject" प्रकार के रैपर में कमजोर-टाइप की गई वस्तुओं को लपेट देगा। "न्यू ऑब्जेक्ट" वाक्यविन्यास का उपयोग करके वस्तुओं की घोषणा करके, वस्तुओं को दृढ़ता से टाइप किया जाता है और लपेटा नहीं जाता है।

$compilerParameters = New-Object System.CodeDom.Compiler.CompilerParameters 
-1

मैं अपना पिछला उत्तर वापस ले गया - उद्धृत नीचे। मुझे कुछ और अधिक कहा जाना चाहिए था:

पावरशेल में मजबूत प्रकार की अनुमान के साथ एक मजबूत प्रकार की प्रणाली है और गतिशील रूप से टाइप किया गया है।

ऐसा लगता है कि यहां काम पर कई मुद्दे हैं, इसलिए जवाब "दृढ़ता से टाइप की गई भाषा" के अर्थ की बेहतर परिभाषा के लिए पूछने वाले प्रश्न शायद उनके प्रश्न के दृष्टिकोण में अधिक बुद्धिमान थे।

  • स्टेटिक बनाम गतिशील प्रकार की जाँच
  • मजबूत कमजोर बनाम
  • टाइपिंग:

    के बाद से PowerShell कई सीमाओं को पार करने के लिए, जहां PowerShell निहित है इस सवाल का जवाब शायद निम्नलिखित क्षेत्रों से मिलकर वेन आरेख में मौजूद है

  • सुरक्षित बनाम असुरक्षित
  • स्पष्ट बनाम निहित घोषणा और निष्कर्ष
  • स्ट्रक्चरल बनाम कर्ताकारक प्रकार सिस्टम
  • टाइपिंग

"पावरशेल एक दृढ़ता से टाइप की गई भाषा है।

हालांकि, केवल आपको उस प्रकार की घोषणा करने की आवश्यकता है जहां अस्पष्टता है।

यदि यह किसी प्रकार का अनुमान लगाने में सक्षम है, तो आपको इसे निर्दिष्ट करने की आवश्यकता नहीं है।"

1

मुझे लगता है कि आप आप से क्या मतलब है परिभाषित करने के लिए की आवश्यकता होगी" "दृढ़ता से टाइप:

कंप्यूटर विज्ञान और कंप्यूटर प्रोग्रामिंग में, शब्द मजबूत टाइपिंग उन स्थितियों में, जहां प्रोग्रामिंग वर्णन करने के लिए प्रयोग किया जाता है भाषाएं अलग-अलग डेटाटाइप वाले मानों को शामिल करने के तरीके पर एक या अधिक प्रतिबंध निर्दिष्ट करती हैं। एंटोनिम कमजोर टाइपिंग है। हालांकि, इन शर्तों को कंप्यूटिंग के संक्षिप्त इतिहास पर इस तरह के विभिन्न प्रकार के अर्थ दिए गए हैं कि अक्सर जानना मुश्किल होता है , संदर्भ के बाहर, उनका उपयोग करते समय एक व्यक्तिगत लेखक का क्या अर्थ है।

-Wikipedia

17

terminlogy आसपास भ्रम की एक निश्चित राशि है। This article टाइप सिस्टम की उपयोगी वर्गीकरण बताता है। एक चर कार्यावधि में अपने प्रकार बदल सकते हैं -

> $x=100 
> $x=dir 

कोई प्रकार त्रुटियों:

PowerShell गतिशील, अंतर्निहित टाइप किए हुए है।

> [int]$x = 100 
> $x = dir 
Cannot convert "scripts-2.5" to "System.Int32". 

तो यह भी चर के स्पष्ट टाइपिंग अगर आप चाहते हैं का समर्थन करता है: यह Python, Perl, JavaScript लेकिन अलग C++, Java, C# से, आदि

हालांकि की तरह है। हालांकि, प्रकार की जांच संकलन समय के बजाय रनटाइम पर की जाती है, इसलिए यह स्थिर रूप से टाइप नहीं किया गया है।

मैंने कुछ लोगों को यह कहते हुए देखा है कि पावरशेल प्रकार अनुमान (क्योंकि आपको एक चर के प्रकार की घोषणा करने की आवश्यकता नहीं है) का उपयोग करता है, लेकिन मुझे लगता है कि यह गलत शब्द है। टाइप अनुमान प्रणाली की एक विशेषता है जो संकलन समय पर टाइप-चेकिंग करता है (जैसे सी # में "var")। पावरशेल केवल रनटाइम पर प्रकारों की जांच करता है, इसलिए यह अनुमान लगाने के बजाय वास्तविक मान की जांच कर सकता है।

> [int]$a = 1 
> [string]$b = $a 
> $b 
1 
> $b.GetType() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  String         System.Object 

तो कुछ प्रकार मक्खी पर बदल रहे हैं:

हालांकि, वहाँ स्वचालित प्रकार-रूपांतरण हो रहा से कुछ राशि है। अधिकांश परिभाषाओं से यह PowerShell को कमजोर टाइप किया गया भाषा बना देगा। यह निश्चित रूप से उदास से अधिक कमजोर है पायथन जो (लगभग?) फ्लाई पर प्रकारों को कभी भी परिवर्तित नहीं करता है। लेकिन शायद पर्ल के रूप में कमजोर नहीं है जो आवश्यकतानुसार लगभग कुछ भी परिवर्तित करेगा।

+1

यह उल्लेखनीय है कि * गतिशील टाइप * पावरशेल जैसी भाषाओं को आम तौर पर खराब त्रुटि संदेश और अधिक रन-टाइम मौत बनाम कुछ * स्थिर रूप से टाइप किया गया * जावा की तरह मिलता है। हालांकि, यहां तक ​​कि * स्थिर टाइपिंग * के साथ आप शून्य सूचक अपवादों के साथ रन-टाइम मौत भी प्राप्त कर सकते हैं और इस तरह, आपको * स्थिर टाइप किए गए * भाषाओं के साथ बेहतर त्रुटि संदेश और डिबगिंग मिलती है। –

2

मुझे लगता है कि एक इंट उदाहरण के लिए एक स्ट्रिंग जोड़ने पर विचार करना चर्चा मिल के लिए और अधिक ग्रिस्ट प्रदान करेगा। गतिशील प्रकार कास्टिंग माना जाता है? टिप्पणियों में से एक में किसी ने कहा कि इस मामले में:

4 + "4"

"4" कोई Int32 हो जाता है। मुझे विश्वास नहीं है कि यह मामला बिल्कुल है।मेरा मानना ​​है कि बजाय कि एक मध्यवर्ती कदम होता है जहां आदेश करने के लिए बदल जाता है:

4 + [System.Convert] :: ToInt32 ("4")

नोट इसका मतलब है कि कि "4" के माध्यम से एक स्ट्रिंग रहता है पूरी प्रक्रिया। इसे प्रदर्शित करने के लिए, इस उदाहरण पर विचार करें:

19# $foo = "4" 
20# $foo.GetType() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  String         System.Object 


21# 4 + $foo 
8 
22# $foo.GetType() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  String         System.Object 
+0

अच्छा बिंदु - धन्यवाद! –

+0

हालांकि आप असाइनमेंट के माध्यम से एक चर के प्रकार को बदल सकते हैं। यदि आप $ foo = "4" और फिर $ foo = 8 + $ foo करते हैं, तो $ foo का प्रकार स्ट्रिंग से int में बदल जाएगा। मूल्य अपरिवर्तनीय हैं, यद्यपि। – JacquesB

1

पावरशेल गतिशील रूप से टाइप, सादा और सरल है। इसे अपने निर्माता, ब्रूस पेटेट द्वारा वर्णित किया गया है।

इसके अतिरिक्त, यदि किसी ने मूल प्रोग्रामिंग भाषा सिद्धांत वर्ग लिया है तो वे इसे जान लेंगे। सिर्फ इसलिए कि एक प्रकार की एनोटेशन प्रणाली है इसका मतलब यह नहीं है कि यह दृढ़ता से टाइप किया गया है। यहां तक ​​कि प्रकार के एनोटेटेड वैरिएबल एक कलाकार के दौरान गतिशील रूप से व्यवहार करते हैं। कोई भी भाषा जो आपको एक चर को स्ट्रिंग असाइन करने और इसे प्रिंट करने की अनुमति देती है और उसके बाद एक ही चर को एक संख्या असाइन करती है और इसके साथ गणना गतिशील रूप से टाइप की जाती है।

साथ ही, PowerShell गतिशील दायरे वाला (यदि यहां किसी को क्या है कि इसका मतलब है)।

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

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