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