2
運行下面的代碼問題通過參考訪問列表
$list = @(1,2)
$hash = @{
foo = @{"Param1" = [REF]$list}
}
function foo([REF]$Param1){
$TempList = New-Object System.Collections.ArrayList
foreach($Entry in $Param1.Value) {
$Entry++
[void]$TempList.Add($Entry)
}
$Param1.Value = $TempList
}
foreach($Function in $Hash.keys) {
& $Function @($Hash.$Function)
#& foo -Param1 ([REF]$list)
}
$list
會給我的錯誤消息
「可以在參數‘參數1’。沒有過程參數變換參考類型在參數的預期。」
如果我將函數調用與註釋掉的函數調用交換,該腳本將起作用。我需要在散列「$ hash」的定義中更改什麼,以便參數類型正確?
背景: 我想用一個配置文件來調用具有任意參數的任意函數。這是有效的,但顯然不允許我處理輸出,因爲我事先不知道函數會返回什麼。所以這個函數需要直接操作主腳本中的列表。我當然可以把這個清單列入全球範圍,但我寧願不要。或者,也許這將是更好的解決方案?
潑灑上不表達工作,並且這'@()'不是潑灑操作者陣列子表達式。 'foreach($ DE $ in $ Hash.GetEnumerator()){$ Params = $ DE.Value; &$ DE.Key @Params}' – PetSerAl
跟隨@ PetSerAl的評論。這裏是對[Array Expression Operator]的引用(http://stackoverflow.com/documentation/powershell/8981/special-operators/27942/array-expression-operator)和[Splatting](http://stackoverflow.com/documentation/powershell/5647/splatting) – TravisEz13
謝謝你們!正在嘗試使用括號讓ps在評估$ Hash。$ Function之前對其進行評估。不知何故,完全忽略了這一點,當然這將成爲一個陣列。 D的時刻:D – whatever