【问题标题】:Function parameters become an array [duplicate]函数参数变成一个数组[重复]
【发布时间】:2013-03-27 01:24:29
【问题描述】:

我有一个简单的 PowerShell 函数

function Foo($a, $b){
  '$a = ' + $a
  '$b = ' + $b
}

我通过调用来调用它

Foo("dogs", "cat");

到目前为止,我读到的所有内容都表明预期的输出是

$a = dogs
$b = cats

我实际看到的是:

$a = dogs cat
$b =

如果我将函数重写为:

function Foo($a, $b){
  '$a is ' + $a.GetType().Name;
  '$b = ' + $b.GetType().Name;
}

输出是:

$a is Object[]
You cannot call a method on a null-valued expression.
At C:\WCMTeam\Percussion\Notifier\foo.ps1:4 char:7
+       '$b = ' + $b.GetType().Name;
+       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

显然 $a 和 $b 正在组合成一个数组。我在做什么导致这种情况,我应该如何改变它以获得我的预期结果?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    你应该使用

    来调用你的函数
    Foo "dogs" "cats"
    

    ,在Powershell中是用来分隔数组元素的,所以

    Foo "dogs", "cats"
    

    使用单个数组参数调用Foo,该参数分配给$a

    【讨论】:

    • 将其称为 Foo("dogs" "cats") 会导致它失败,并出现错误“表达式或语句中出现意外的令牌 '"cats"'。”但是将其更改为 Foo "dogs" "cats" 确实可以解决问题。谢谢;这和 VBScript 中的括号规则一样令人抓狂。
    • 听男人(李)。您根本不应该在函数调用中使用()。 PowerShell 不等于 c#,PS 有它自己的语言(虽然很多 .Net / C# 代码工作)。
    • 哦,我听好了。只是发现过渡有点迷失方向。 :-/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 2015-10-04
    相关资源
    最近更新 更多