2013-05-12 18 views
6

Oto skrypt PowerShell:PowerShell jest ignorowanie wypowiedzi po wywołaniu funkcji

function PickANumber() 
{ 
    12 
} 

function GetTheAnswer() 
{ 
    PickANumber + 30 
} 

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

Wyjście z tego skryptu jest:

The answer is 12 

O ile mi zadzwonić przypuszczenie, dzieje się tak dlatego wywołania funkcji PowerShell nie ma nawiasów wokół argumentów lub przecinków między nimi, więc PickANumber + 30 jest analizowany jako coś takiego jak PickANumber('+', 1) zamiast PickANumber() + 1. I to nie jest błąd, nieużywane argumenty są po prostu ignorowane (jak w przypadku JavaScript).

Jeśli go zmienić nieznacznie, to odpowiedź brzmi 42:

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

Ale na pewno nie jest sposobem na osiągnięcie tego w jednej linii?

Zamieszczam tutaj, ponieważ będzie to kąsać kogoś innego.

Odpowiedz

3

Aby uniknąć tej pułapki można zdefiniować funkcje jak ten

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

    12 
} 

Podczas wykonywania PickANumber + 30 dostaniesz błąd

PickANumber: pozycyjną parametr nie można stwierdzić, że akceptuje argumentu „+ ".

+0

Świetnie, powoduje to, że nieprawidłowy kod powoduje błąd. Teraz połącz się z drugą odpowiedzią "(PickANumber) + 30" dla naprawienia podanego błędu. – Anthony

8

Prawidłowe połączenie jest

(PickANumber) + 30 

Oryginalny kod PickANumber + 30 oznacza wezwanie do PickANumber z dwoma argumentów + i 30 które są po prostu ignorowane przez PickANumber.

Powiązane problemy