Monday, 15 September 2014

When does Powershell honour default values when using $null splat parameters? -


निम्नलिखित फ़ंक्शन पर विचार करें:

  function f1 {param ($ sb = {}, $ 'S =' ') अगर ($ sb -isnot [scriptblock]) {' scriptblock '} अगर ($ s- नहीं [स्ट्रिंग]) {' string '}}  

अब आह्वान करें यह एक अलग पैरामीटर के साथ:

  पीएस सी: \ & gt; $ Splat = @ {foo = 'bar'} पीएस सी: \ & gt; F1 @splat  

के रूप में अपेक्षित, कुछ भी नहीं लौटाया गया है अब $ null splat पैरामीटर के साथ इसे फिर से प्रयास करें:

  PS C: \ & gt; $ Splat = $ null PS C: \ & gt; F1 @splat स्क्रिप्टब्लॉक  

अजीब तरह से, स्क्रिप्टब्लॉक वापस आ गया है जाहिर है, कम से कम [scriptblock] पैरामीटर के लिए, जब कोई $ null splat पैरामीटर उपयोग किया जाता है तो पावरशेल्ड डिफ़ॉल्ट मान को सम्मान नहीं कर रहा है लेकिन powershell [string] के लिए डिफ़ॉल्ट मान का सम्मान करता है।

  $ splat = @ {foo = 'bar'} "$ (& amp; $ args} @splat)" - "पाठ"> 

यह समझने में मदद करने के लिए एक प्रदर्शन है - फू: बार

जब आप हैश तालिका को अलग कर लेते हैं, तो उसे -के में परिवर्तित कर दिया जाता है: मान स्ट्रिंग जोड़ी जो आपके फ़ंक्शन के पैरामीटर बन जाते हैं।

अब कोशिश करें: < / P>

  $ splat = $ null "$ (& amp; $ args} @splat)"  

कुछ भी नहीं लौटाया गया है पैरामीटर स्ट्रिंग उत्पन्न करने की कोई चाबियाँ नहीं हैं, इसलिए अंतिम परिणाम समान है, जैसे कि कोई भी मानदंड नहीं गुजर रहा है।


No comments:

Post a Comment