6

这是一个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
}

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

我在这里发帖是因为这也会咬别人。

4

2 回答 2

8

正确的调用是

(PickANumber) + 30

原始代码PickANumber + 30意味着一个PickANumber带有两个参数的调用+30它们被PickANumber.

于 2013-05-12T13:32:49.970 回答
3

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

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

  12
}

执行PickANumber + 30时会报错

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

于 2013-05-12T13:39:15.973 回答