1
我想在PowerShell v4中創建一個遞歸函數。它會解析一個對象和一個關卡。該對象可以是文件夾結構或XML節點。我的代碼不能按預期工作,我需要幫助。問題是如何將[int]level
和對象傳遞給遞歸函數?奇怪的PowerShell遞歸行爲
此代碼將如預期:
function Recurs([int]$level)
{
Write-Host $level
if ($level -lt 5) {
Recurs($level + 1)
}
}
Recurs(0)
它會產生這樣的輸出:
0
1
2
3
4
5
但是,當我添加新的參數,然後$level
鬆動它的能力記住它的價值。我想這與ByVal或ByRef有關,但我不知道如何解決它。在這個例子中,結果將返回無限0:
function Recurs1($obj, [int]$level)
{
Write-Host $level
if ($level -lt 5) {
Recurs1($level + 1)
}
}
Recurs1('aaa', 0)
有了這個例子,
function Recurs2([int]$level, $obj)
{
Write-Host $level
if ($level -lt 5) {
Recurs2($level + 1)
}
}
Recurs2(0 ,'aaa')
我得到一個錯誤:
Recurs2 : Cannot process argument transformation on parameter 'level'. Cannot convert the
"System.Object[]" value of type "System.Object[]" to type "System.Int32".
At line:8 char:8
+ Recurs2(0 ,'aaa')
+ ~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Recurs2], ParameterBindingArgumentTransform
ationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Recurs2