奇怪的PowerShell递归行为

花粉B

我正在尝试在PowerShell v4中创建递归函数。它将解析一个对象和一个关卡。该对象可以是文件夹结构或XML节点。我的代码无法正常工作,我需要帮助。问题是如何将[int]level和对象传递给递归函数?


此代码将按预期工作:

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
马丁·布兰德尔

在PowerShell中,调用函数时不要使用方括号,也不用逗号分隔参数您改为这样呼叫Recurse 1

Recurs1 -obj 'aaa' -level 0

以及整个功能:

function Recurs1($obj, [int]$level)
{
    Write-Host $level
    if ($level -lt 5)  
    {
        Recurs1 -obj $obj -level ($level + 1)
    }
}
Recurs1 -obj 'aaa' -level 0

正如TessellatingHeckler在其已删除答案中所示,您还可以按其位置传递参数,例如

Recurs1 'aaa' 0

但是,我认为当您明确指定参数名称时,脚本会变得更具可读性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

递归函数的奇怪行为

来自分类Dev

递归函数的奇怪行为

来自分类Dev

递归算法中的奇怪行为,

来自分类Dev

Javascript,奇怪的递归行为,DFS

来自分类Dev

powershell if语句奇怪的行为

来自分类Dev

递归函数中的奇怪/奇怪行为

来自分类Dev

递归函数在PHP中的行为很奇怪

来自分类Dev

非常奇怪的Powershell xml编写行为

来自分类Dev

ForEach方法之后PowerShell长度的奇怪行为

来自分类Dev

Powershell奇怪的错误处理行为

来自分类Dev

Invoke-Comand 期间奇怪的 PowerShell 行为

来自分类Dev

Swift(Beta 7)中递归枚举的奇怪行为

来自分类Dev

递归和Kernel#rand(Ruby)的奇怪行为

来自分类Dev

三元运算符在递归中的奇怪行为

来自分类Dev

递归和Kernel#rand(Ruby)的奇怪行为

来自分类Dev

奇怪的行为

来自分类Dev

奇怪的行为

来自分类Dev

奇怪的行为

来自分类Dev

Powershell-替换给出奇怪的行为

来自分类Dev

PowerShell与数组字符串元素匹配的奇怪行为

来自分类Dev

预测行为的奇怪行为

来自分类Dev

XML在Java中具有奇怪行为的树结构的递归打印

来自分类Dev

奇怪的addEventListener行为

来自分类Dev

MATLAB subs():奇怪的行为

来自分类Dev

右移位的奇怪行为

来自分类Dev

奇怪的约束行为

来自分类Dev

IronPython奇怪的行为

来自分类Dev

Java重载的奇怪行为

来自分类Dev

htaccess问题-奇怪的[或]行为