2012-02-10 8 views
6

ठीक है। मैं एक स्कूल असाइनमेंट पूरा करने का प्रयास कर रहा हूं और मेरे जीवन के लिए इसे समझ नहीं सकता। मैं एक फ़ंक्शन से दूसरे को "मॉड्यूलर" टाइप स्क्रिप्ट बनाने के लिए पावरहेल का उपयोग करने की कोशिश कर रहा हूं। मुझे लगता है कि $ स्क्रिप्ट का उपयोग किए बिना फ़ंक्शन के दायरे से मूल्यों को कैसे स्थानांतरित करना है: xxxxx। संदर्भ में एक नियमित तर्क पैरामीटर पास के रूप में शक्तियों में शक्तियों को स्थानांतरित करने का कोई और तरीका है?पावरहेल पैरामीटर के लिए तर्क मान पास कर रहा है और

यहाँ मैं क्या है:

function main 
{ 
inputGrams($carbGrams, $fatGrams) 
$carbGrams 
$carbGrams 
calcGrams 
displayInfo 
} 

function inputGrams([ref]$carbGrams, [ref]$fatGrams) 
{ 
    $carbGrams = read-host "Enter the grams of carbs per day" 
    $fatGrams = read-host "Enter the grams of fat per day" 
} 

function calcGrams 
{ 
    $carbCal = $carbGrams * 4 
    $fatCal = $fatGrams * 9 
} 

function displayInfo 
{ 
    write-host "The total amount of carb calories is $carbCal" 
    write-host "The total amount of fat calories is $fatCal" 
} 

main 

दो मानों सही होने के बाद inputGrams समारोह हर बार स्क्रिप्ट चलाने है बदलना चाहिए लेकिन वे गुंजाइश मुद्दों और मान पास करने की वजह से नहीं है। किसी को भी पता है कि उन मानों को मुख्य कार्य में सही ढंग से कैसे पास किया जाए?

+0

क्या हिस्सा होमवर्क, की गणना के पोषण की जानकारी या एक PowerShell स्क्रिप्ट लिखने है? यदि उत्तरार्द्ध मुझे आपके स्कूल पसंद है :-) –

उत्तर

1

एंडी सही रास्ते पर है, लेकिन [रेफरी] मुश्किल होते हैं और यह अगर आप कर सकते हैं उन्हें बचने के लिए सिफारिश की है।

जैसा कि आपने कहा था, समस्या दायरा है। आपके सभी फ़ंक्शन -सेप्ट मुख्य - मुख्य से बुलाए जाते हैं, इसलिए आपको इन कार्यों में मुख्य के दायरे में सेट करके चर सेट करने की आवश्यकता है, यानी सेट-वेरिएबल या न्यू-वेरिएबल के साथ उनके माता-पिता का दायरा।

गेट-वैरिएबल के साथ अपने मूल्यों को पुनर्प्राप्त करते समय समान बिंदु मान्य है।

function main 
{ 
    inputGrams 
    $carbGrams 
    $fatGrams 
    calcGrams 
    displayInfo 
} 

function inputGrams 
{ 
    # type constrain as Single because Read-Host returns a String 
    [single]$carbs = read-host "Enter the grams of carbs per day" 
    [single]$fat = read-host "Enter the grams of fat per day" 

    # scope 1 is the parent scope, i.e. main's scope 
    Set-Variable -Name carbGrams -Value $carbs -Scope 1 
    Set-Variable -Name fatGrams -Value $fat -Scope 1 
} 

function calcGrams 
{ 
    # scope 1 is the parent scope, i.e. main's scope 
    Set-Variable -Name carbCal -Value ($carbGrams * 4) -Scope 1 
    Set-Variable -Name fatCal -Value ($fatGrams * 9) -Scope 1 
} 

function displayInfo 
{ 
    # scope 1 is the parent scope, i.e. main's scope 
    $_carbCal = Get-Variable -Name carbCal -Scope 1 -ValueOnly 
    $_fatCal = Get-Variable -Name fatCal -Scope 1 -ValueOnly 

    write-host "The total amount of carb calories is $_carbCal" 
    write-host "The total amount of fat calories is $_fatCal" 
} 

main 

पुनश्च: मुझे आशा है कि मैं अपने स्कूल के काम को खराब नहीं था, सिर्फ बाहर मदद करना चाहता था;)

+0

बचाव से बचने के लिए संदर्भ? –

+1

पी। 25 में से 25.manning.com/payette/wpia_errata.pdf – zx38

+0

ब्रूस का उदाहरण पसंद आया मुझे उम्मीद थी ... मैं खुद आरईएफ का चयन नहीं करना चाहूंगा हालांकि मुझे लगता है कि ओपी के परिदृश्य के लिए यह ठीक है। दूसरी तरफ आम तौर पर फ़ंक्शन रिटर्न वैल्यू रखने का प्रयास करते हैं, यदि यह देखने के लिए कुछ आसान उत्पादन करने की उम्मीद है कि डेटा किस दायरे में है। –

13

कुछ समस्याएं हैं।

function main 
{ 
    # 1. Create empty variable first. 
    New-Variable -Name carbGrams 
    New-Variable -Name fatGrams 

    # 2. Spaces in between parameters. Not enclosed in parens. 
    # 3. Put REF params in parens. 
    inputGrams ([ref]$carbGrams) ([ref]$fatGrams) 

    $carbGrams 
    $fatGrams 
} 

function inputGrams([ref]$carbGrams, [ref]$fatGrams) 
{ 
    # 4. Set the Value property of the reference variable. 
    $carbGrams.Value = read-host "Enter the grams of carbs per day" 
    $fatGrams.Value = read-host "Enter the grams of fat per day" 
} 

main 

और स्पष्टीकरण:

  1. आप REF द्वारा इसे पारित करने से पहले चर बनाने की आवश्यकता होगी सबसे पहले यहां एक काम उदाहरण है।
  2. पैरों में पावरशेल फ़ंक्शन पैराम संलग्न न करें, बस उन्हें रिक्त स्थान से अलग करें।
  3. माता-पिता में आरईएफ तर्क डालें।
  4. आरईएफ वैरिएबल के मान को सेट करने के लिए, आपको वैल्यू प्रॉपर्टी सेट करने की आवश्यकता होगी।
+1

"मूल्य" संपत्ति मुझे क्या मिला है ... धन्यवाद एंडी! – slashp

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