2013-08-27 26 views

Odpowiedz

17

Twoja funkcja nie działa, ponieważ PowerShell zwraca wszystkie non-captured stream output, a nie tylko argument instrukcji return. Pusta tablica jest w trakcie procesu przekształcana w $null. Można jednak zachować tablicę w zamian za prepending it with the array construction operator (,):

function test { 
    $arr = @() 
    return ,$arr 
} 
+1

stanowczo frustrujące. Jeśli zwrócisz @ (/ * niektóre filtrowane wyrażenie, które zawiera zero elementów * /), to samo wystąpi. return, @ (/ * expr * /) jest poprawką ... ale jest hacky jak diabli. Tak łatwo przeoczyć. –

+0

Ta głupia praca kosztowała mnie około jednego dnia w przerażającym czasie. Nie mogłem dowiedzieć się, w jaki sposób mój skrypt był podwójnie wartości w tablicy. Dziękujemy za opublikowanie tego. Dlaczego mieliby nawet myśleć, że to dobry pomysł na funkcje? Bardzo frustrujące! Najgorsze jest to, że miałem '$ arr.add (1)', który wyprowadzał liczbę po tablicy. Wykonanie '$ x = $ arr.add (1)' naprawiło problem. Hacky. –

+0

@BradFJacobs: Można również użyć '... | Out-Null' lub '...> $ null' do tłumienia niepożądanych wyników. Nie uważam jednak, aby zwrot wszystkich niezapisanych danych wyjściowych był złym pomysłem per se, ale jest to po prostu nieoczekiwane dla większości osób z doświadczeniem w innych językach programowania. Właściwe użycie może faktycznie uprościć zwracanie danych z funkcji, ponieważ nie trzeba gromadzić wszystkich pożądanych danych wyjściowych w zmiennej przed jej zwróceniem. –

Powiązane problemy