2013-05-12 57 views
6

这里忽略表达式是一个PowerShell脚本: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。这不是一个错误,未使用的参数会被忽略(就像JavaScript一样)。

如果你改变它咯,那么答案是42:

function GetTheAnswer() 
{ 
    $a = PickANumber 
    $a + 30 
} 

但肯定有一行这样的方式?

我在这里发布,因为这将咬别人。

回答

3

为了避免这一缺陷,你可以像这样定义

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

    12 
} 

你的函数在执行PickANumber + 30,你会得到错误

PickANumber:位置参数无法找到接受 说法“+ ”。

+0

太好了,这会导致不正确的代码给出错误。现在结合其他答案“(PickANumber)+ 30”来修复给出的错误。 – Anthony 2013-05-12 22:27:57

8

正确的调用是

(PickANumber) + 30 

原代码PickANumber + 30意味着有两个 参数+30这是简单地通过PickANumber忽略到PickANumber通话。