这是一个powershell脚本:

function PickANumber()
{
  12
}

function GetTheAnswer()
{
  PickANumber + 30
}

$answer = GetTheAnswer
write-output "The answer is $answer"

该脚本的输出为:
The answer is 12

据我猜测,这是因为powershell函数调用的参数或逗号之间没有括号,因此PickANumber + 30被解析为PickANumber('+', 1)而不是PickANumber() + 1。而且这不是错误,未使用的args会被忽略(例如JavaScript)。

如果稍加更改,答案是42:
function GetTheAnswer()
{
  $a = PickANumber
  $a + 30
}

但是肯定有一种方法可以做到这一点吗?

我要在这里发布,因为这也会咬人。

最佳答案

为了避免这种陷阱,您可以这样定义函数

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

  12
}

执行PickANumber + 30时,您会收到错误消息

08-03 18:40