Powershell在函数调用后忽略表达式

Ant*_*ony 6 syntax powershell expression

这是一个powershell脚本:

function PickANumber()
{
  12
}

function GetTheAnswer()
{
  PickANumber + 30
}

$answer = GetTheAnswer
write-output "The answer is $answer"
Run Code Online (Sandbox Code Playgroud)

该脚本的输出是:

The answer is 12
Run Code Online (Sandbox Code Playgroud)

据我所知,这是因为powershell函数调用在它们之间的参数或逗号周围没有括号,因此PickANumber + 30被解析为类似的东西PickANumber('+', 1)而不是PickANumber() + 1.这不是一个错误,未使用的args被简单地忽略(就像使用JavaScript一样).

如果你稍微改一下,那么答案是42:

function GetTheAnswer()
{
  $a = PickANumber
  $a + 30
}
Run Code Online (Sandbox Code Playgroud)

但肯定有一种方法可以在一条线上做到这一点吗?

我在这里张贴是因为这也会咬别人.

Rom*_*min 8

正确的电话是

(PickANumber) + 30
Run Code Online (Sandbox Code Playgroud)

原始代码PickANumber + 30意味着PickANumber使用两个参数进行调用,+30这些参数只是被忽略PickANumber.


Lar*_*ens 3

为了避免这个陷阱,你可以像这样定义你的函数

function PickANumber()
{
  [CmdletBinding()]
  param()

  12
}
Run Code Online (Sandbox Code Playgroud)

执行的时候PickANumber + 30会报错

PickANumber:找不到接受参数“+”的位置参数。