天天看點

PowerShell函數調用問題

    powershell函數調用問題及原因分析。。。此代碼是測試使用,重點是函數調用問題。。。

開始我是這麼寫的,結果發現無論如何函數傳回的都是0,函數如下:

PowerShell函數調用問題

檔案test.txt的内容如下:

PowerShell函數調用問題

也就是,即使我現在輸入haha或者houhou或者heihei,它還是提示“none,you can add it!!”,這是怎麼回事,我上網搜了下原來powershell的函數調用不用加括号,直接在函數後面寫參數就行了。。于是,我将第18行改成了if(Exists $t,$a  -eq 1),發現結果還是不對,然後查了好多有關powershell調用的資料,資料上說調用時可以指定要傳的具體的形參和實參的對應值,我嘗試了一下,将它改為:

if(Exists -temp $t, -array $a  -eq 1),哈哈真可以了,好神,,結果如下:

PowerShell函數調用問題

運作結果是:

PowerShell函數調用問題

輸入gaga的結果是:

PowerShell函數調用問題
PowerShell函數調用問題

然後我仔細又分析了下,其實一開始錯誤是有原因的,因為powershell有時候強大的讓人窒息,它能把檔案一行一行的讀出來自動存儲在一個數組中,然後按照索引進行通路,能将一些變量自動歸為一組,就像這個例子,調用的時候由于沒有指定形參,于是将傳入的兩個值$t和$a當成一個參數數組傳給Exists函數的第一個參數$temp了,這樣$array是空值,是以根本不執行foreach,直接傳回0了。這裡,我深深的感慨一下,powershell中的變量是弱類型的,當然這也是所有腳本語言的共同特點,即沒有類型的限制,不用考慮是否有數組溢出、數組類型不比對等頭疼問題。也很友善,任何變量可以不指定類型,直接拿來用了,不然這裡怎麼會把$temp當成數組呢,即$a這個東西可能是一個整型、一個字元串、一個數組。。。。。。是以這樣的話,您就别指望它報錯了。

    是以,以防萬一,在函數調用時,還是老老實實的指定實參是傳給哪個形參吧。進入寫函數的時候又沒有再出現過這個問題了,很奇怪。

作者:

zhoujie

出處:

http://www.cnblogs.com/zhoujie/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,不然我擔心部落格園找你算賬

如果您覺得本文對你有幫助,請豎起您的大拇指右下角點推薦,也可以關注我