PowerShell v4で再帰関数を作成しようとしています。オブジェクトとレベルを解析します。オブジェクトは、フォルダ構造またはXMLノードである可能性があります。私のコードは期待どおりに機能せず、私は助けが必要です。問題は、[int]level
とオブジェクトを再帰関数に渡すにはどうすればいいですか?奇妙なPowerShell再帰的動作
このコードは期待通りに動作します:私は、新しいパラメータを追加するとき
0
1
2
3
4
5
が
しかし、その後、$level
緩いそれが機能だ:
function Recurs([int]$level)
{
Write-Host $level
if ($level -lt 5) {
Recurs($level + 1)
}
}
Recurs(0)
それはこの出力を生成します。その価値を覚えています。私はそれが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')
が、私はエラーを取得する:PowerShellで
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