13
Dato che questo funziona:PowerShell non restituisce un array vuoto come una matrice
$ar = @()
$ar -is [Array]
True
Perché non funziona?
function test {
$arr = @()
return $arr
}
$ar = test
$ar -is [Array]
False
Cioè, perché non è restituito un array vuoto dalla funzione di test?
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. –
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. –
@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. –