Я пытаюсь создать рекурсивную функцию в PowerShell v4. Он будет анализировать объект и уровень. Объектом может быть структура папок или узел XML. Мой код работает не так, как ожидалось, и мне нужна помощь. Вопрос в том, как я могу передать [int]level
и объект рекурсивной функции?Strange 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