2013-05-12 56 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通話。