2013-08-27 13 views

risposta

17

La funzione non funziona perché PowerShell restituisce tutti gli non-captured stream output, non solo l'argomento dell'istruzione return. Un array vuoto viene trasformato in $null durante il processo. Tuttavia, è possibile mantenere un allineamento al ritorno da prepending it with the array construction operator (,):

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

mooooolto frustrante. Se si restituisce @ (/ * qualche espressione filtrata che ha zero elementi * /) si verifica anche lo stesso comportamento. return, @ (/ * expr * /) è una correzione ... ma è hacky da morire. Così facile da trascurare. –

+0

Questo lavoro stupido mi è costato circa un giorno in un momento spaventoso. Non riuscivo a capire come il mio script fosse il doppio dei valori nella matrice. Grazie per aver postato questo. Perché dovrebbero pensare che sia stata una buona idea per le funzioni! Così frustrante! La parte peggiore è che ho avuto un '$ arr.add (1)' che emetteva il conteggio dell'array dopo. Fare '$ x = $ arr.add (1)' ha risolto il problema. Hacky. –

+0

@BradFJacobs: potresti anche usare '... | Out-Null' o '...> $ null' per sopprimere l'output indesiderato. Non prenderei in considerazione la possibilità di restituire l'output non acquisito come una cattiva idea di per sé, ma è inatteso solo per la maggior parte delle persone con uno sfondo in altri linguaggi di programmazione. Se usato correttamente, può effettivamente semplificare il ritorno dei dati da una funzione, perché non è necessario raccogliere tutti gli output desiderati in una variabile prima di restituirli. –

Problemi correlati