2012-11-11 16 views
4

當我通過引用散列表的函數傳遞散列表時遇到了一個障礙。我怎樣才能解決這個問題?在Powershell中通過引用傳遞散列表後發生濺落

Function AllMyChildren { 
    param (
     [ref]$ReferenceToHash 
    } 
    get-childitem @ReferenceToHash.Value 
    # etc.etc. 
} 
$MyHash = @{ 
    'path' = '*' 
    'include' = '*.ps1' 
    'name' = $null 
} 
AllMyChildren ([ref]$MyHash) 

結果:錯誤(「Splatted變量不能被用作一個屬性或陣列表達式的一部分分配表達式給一個臨時變量的結果,那麼圖示的臨時變量代替。」) 。

試圖做到這一點:

$newVariable = $ReferenceToHash.Value 
get-childitem @NewVariable 

這沒有工作,每個錯誤信息的權利似乎。在這種情況下,它是首選語法嗎?

回答

4

1)使用[ref]傳遞哈希表(或任何類的實例,即引用類型)是沒有意義的,因爲它們總是通過引用自身傳遞。 [ref]與值類型(標量和結構實例)一起使用。

2)splatting操作符可以直接應用於變量,而不是表達式。

因此,爲了解決這個問題只需通過哈希表的功能,因爲它是:

Function AllMyChildren { 
    param (
     [hashtable]$ReferenceToHash # it is a reference itself 
    ) 
    get-childitem @ReferenceToHash 
    # etc.etc. 
} 
$MyHash = @{ 
    'path' = '*' 
    'include' = '*.ps1' 
    'name' = $null 
} 
AllMyChildren $MyHash 
+1

非常感謝。我認爲Perl-ish(而不是.Net-ish足夠了 - 很多東西要學習)。通過引用明確地傳遞某些東西似乎很奇怪,但卻不得不復制它。很高興聽到它比我想象的更直接。 – marst12017