2009-06-05 13 views
5

यह कुल मिलाकर एक नया प्रश्न है। प्यार शक्तियां, लेकिन मुझे निश्चित रूप से यहां कुछ नहीं मिल रहा है:पैरामीटर और पावरहेल फ़ंक्शन

मैं स्ट्रिंग x बार दोहराने के लिए एक साधारण फ़ंक्शन बना रहा हूं। मुझे पैरामीटर के साथ कुछ अजीब समस्या है - ऐसा लगता है कि यह दूसरे पैरामीटर को पहचान नहीं रहा है।
जब मैं फ़ंक्शन चलाता हूं, तो यह एक खाली स्ट्रिंग देता है। इसे लोड करने के लिए

 

Function Repeat-String([string]$str, [int]$repeat) { 
    $builder = new-object System.Text.StringBuilder 
    for ($i = 0; $i -lt $repeat; $i++) {[void]$builder.Append($str)} 
    $builder.ToString() 
} 

पहले मैं डॉट स्रोत: इसके अलावा, मुझे लगता है कि यह 1. में 2 मापदंडों लादू है यहाँ मेरी कोड है
. .\RepeatString.ps1
तो मैं इस तरह निष्पादित करें:
Repeat-string("x", 7)
मैं 7 x की एक स्ट्रिंग की उम्मीद है। मुझे एक खाली स्ट्रिंग मिल गई।

मैं कुछ और के आसपास पोकिंग चला गया, और मैंने "के लिए" लूप बदल दिया। मैंने "-lt $ repeat" भाग को "-lt 5" के साथ बदल दिया, ताकि मुझे दोहराने की निश्चित संख्या मिल सके। जब मैंने वह किया, मैं निम्नलिखित निर्गम (उद्धरण के बिना) मिल गया:
दोहराएँ-स्ट्रिंग ("x", 7)
"एक्स 7x 7x 7x 7x 7"
ऐसा लगता है जैसे कि यह $ श्रृंखलाबद्ध है str और $ 2 अलग पैरामीटर की तरह उनका इलाज करने के बजाय पैरामीटर दोहराएं। कोई विचार क्या मैं गलत कर रहा हूँ?

उत्तर

17

समस्या यह है कि क्या आप एक सरणी पैदा कर रहे) के निम्नलिखित

Repeat-string "x" 7 

PowerShell किसी भी समय आप के अंदर मूल्यों के एक समूह डाल में (करने के लिए अपने कोड बदलने की आवश्यकता है। इसका मतलब है कि आपके नमूने में आप वास्तव में एक पैरामीटर के रूप में फ़ंक्शन में सरणी पास कर रहे हैं।

+0

धन्यवाद! मुझे पता था कि मैं कुछ बेवकूफ कर रहा था - बस यकीन नहीं था कि क्या। – JMarsch

+0

@JMarsch, हर कोई कम से कम एक बार इस से गुजरता है। यह वास्तव में कष्टप्रद है :( – JaredPar

+0

मुझे इससे नफरत है! लेकिन आप इसका उपयोग करते हैं ... – Philippe

0

बेशक जेरेडपायर सही है। (नोटिस मैं 1 के बजाय 0 पर शुरू)

Function Repeat-String([string]$str, [int]$repeat) { 
    $builder = new-object System.Text.StringBuilder 
    1..$repeat | %{ [void]$builder.Append($str) } 
    return $builder.ToString() 
} 

Repeat-string "x" 7 
+0

धन्यवाद - रेंज फ़ंक्शन के बारे में नहीं पता था। मुझे अपनी रीडिंग सूची में पावरहेल पर एक पुस्तक फिट करने की आवश्यकता होगी। (मुझे लगता है कि इस बिंदु पर, मैं पावरहेल 2.0 पुस्तक के लिए भी देख/प्रतीक्षा कर सकता हूं) – JMarsch

6

यहाँ एक बेहतर तरीका है, बस एन दोहराता करके अपने (किसी भी) स्ट्रिंग गुणा करते हैं:

मैं इस के लिए भी सीमा समारोह .. में बनाया का उपयोग करना चाहते :

PS > function Repeat-String([string]$str, [int]$repeat) { $str * $repeat } 
PS > Repeat-String x 7 
xxxxxxx 

PS > Repeat-String JMarsch 3 
JMarschJMarschJMarsch 
+0

पावरहेल के बारे में मैं जो भी नई चीज सीखता हूं, वह मुझे दिखाता है कि यह कितना अच्छा है। इसे साझा करने के लिए धन्यवाद, शे +1 – JMarsch

+0

पावरशेल रॉक्स ;-) –

+0

एक तरह से, शै लेवी की टिप्पणी से पता चलता है कि हम उपयोगकर्ता द्वारा परिभाषित-फ़ंक्शन लिखने के बजाय ** "गुणा स्ट्रिंग" सुविधा ** का उपयोग कर सकते हैं। –

6

एक विख्यात चीनी कहावत राज्यों:

"एक आदमी एक मछली और y दें कहो उसे एक दिन के लिए खिलाओ। एक आदमी मछली के और आप एक जीवन भर के लिए उसे खिलाने के बारे में बताएं। "

के लिए महानगरीय दिमाग तुम्हारे बीच, मूल 授人以魚不如授人以漁 है और पिनयिन रोमनीकरण Shòu rén yǐ yú bùrú shòu rén yǐ yú है। (मैं बात करने के लिए सीखने की है मंदारिन की एक चापलूसी और पिनयिन लिखने के लिए मुझे अभ्यास करना है! उत्सुकता से मैंने पाया कि उपरोक्त पिनयिन अभिव्यक्ति एक पहेली है, लेकिन यह एक और समय की कहानी है ... :-)

अब मेरे बिंदु पर : जेमारस्च एक आम पावरशेल पिटफॉल पर आया जो किसी भी व्यक्ति को यात्रा करने के लिए उत्तरदायी था "पारंपरिक" भाषाएं, और @ जेरेडपायर ने सही समाधान प्रदान किया। मैं प्रस्तुत करता हूं, हालांकि, यह जवाब आपके सामने एक मछली को मारने जैसा है!

सरल-Talk.com पर प्रकाशित, Down the Rabbit Hole: A Study in PowerShell Pipelines, Functions, and Parameters फ़ंक्शन-कॉलिंग इंटरफ़ेस की कई अन्य बारीकियों के साथ उपरोक्त pitfall पर चर्चा करता है। उदाहरण के लिए, मेरे आलेख का एक खंड, निम्नलिखित सभी कॉलों के बीच सूक्ष्म मतभेदों को f पर कार्य करने के लिए सूक्ष्म अंतर को शामिल करता है, जिनमें से अधिकांश आपकी अपेक्षाओं को उत्पन्न नहीं करेंगे।

f(1,2,3) 
f (1,2,3) 
f 1,2,3 
f (1 2 3) 
f 1 2 3 

लेख के साथ आसान दीवार के संदर्भ के पीडीएफ डाउनलोड की भी तलाश करें।

यहाँ एक झलक है: PowerShell Functions Quick Reference

(ओह, और आप भी Give a man a fish... पर ऊपर क्लासिक उद्धरण का विनोदी उपोत्पाद की सूची की जांच करना चाह सकते हैं)

+0

ग्रेट आलेख। इसके लिए धन्यवाद। – crush

+0

मछली को इसके साथ क्या करना है? :) – bgmCoder

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