我正在构建一个菜单,并希望将数组作为参考传递给函数。
当我通过参考时,一切正常。但是当我想传递第二个参数时,它将无法使用“ParameterBindingArgumentTransformationException”。我不明白为什么。
这是 - 工作最小代码:
function Menu {
param([Ref]$mi)
Write-Host "var"
Write-Host $mi.value[0].cmd
Write-Host $mi.value[1].desc
Write-Output 0
}
function MainMenu {
$mm = @(@{desc='Windows Tools';cmd='WinToolsMenue'},
@{desc='copy setup.exe';cmd='setupexe'},
@{desc='gpupdate (Policy)';cmd='cmd /c gpupdate /force'},
@{desc='Exit';cmd='break'})
$a = Menu([Ref]$mm)
}
& MainMenu
问题代码:
function Menu {
param([Ref]$mi, $b)
Write-Host $b
Write-Host $mi.value[0].cmd
Write-Host $mi.value[1].desc
Write-Output 0
}
function MainMenu {
$mm = @(@{desc='Windows Tools';cmd='WinToolsMenue'},
@{desc='copy setup.exe';cmd='setupexe'},
@{desc='gpupdate (Policy)';cmd='cmd /c gpupdate /force'},
@{desc='Exit';cmd='break'} )
$mm
$a = Menu([Ref]$mm, "b")
}
& MainMenu
几乎尝试过([Ref] $ mi),$ b或([Ref] $ mi,$ b),但它不起作用。有谁知道我做错了什么?
答案 0 :(得分:1)
$a = Menu ([Ref]$mm, "b")
这不是你怎么称呼一个功能。请记住,逗号是数组的运算符,括号表示首先计算的表达式。这不会因为你正在调用一个函数而改变。这就是“调用函数Menu
,第一个参数是一个包含[Ref]$mm
和"b"
两个元素的数组。基本上,你称之为:
$a = Menu -mi @([Ref]$mm, "b") -b $null
您需要指定:
$a = Menu ([Ref]$mm) "b"
或者:
$a = Menu -mi ([Ref]$mm) -b "b"