Nella funzione, si modifica la contenuto della tabella hash quindi non è necessario utilizzare $ global a meno che la funzione (o un chiamante di funzione tra la funzione e lo scope globale) abbia variabili locali $ Var1 e $ Var2 (BTW non ti manca $
). Se questo è tutto il tuo codice allora direi di lasciarlo così com'è. Tuttavia, se il codice consente al codice di altre persone di chiamare la propria funzione, utilizzare l'identificatore $global:Var1
per accertarsi di accedere alla variabile globale e non accedere inavvertitamente a una variabile con lo stesso nome all'interno di una funzione che chiama la propria funzione .
Un'altra cosa da sapere sulla visibilità dinamica in PowerShell è che quando si assegna un valore alla variabile in una funzione e quella variabile sembra essere un esempio globale:
$someGlobal = 7
function foo { $someGlobal = 42; $someGlobal }
foo
$someGlobal
PowerShell sarà fare un "copia-on -write "operazione sulla variabile $ someGlobal all'interno della funzione. Se il tuo intento era quello di modificare realmente globale, allora si può usare il $global:
specificatore:
$someGlobal = 7
function foo { $global:someGlobal = 42; $someGlobal }
foo
$someGlobal
fonte
2014-06-26 20:44:28
Grazie Keith (ho cambiato il mio errore di battitura)! È esattamente ciò che è stato un po 'di confusione: gli array e gli hash (che altro?) Possono essere modificati all'interno di una funzione senza utilizzare $ global: ma le variabili normali non possono. – gooly
Fondamentalmente è possibile modificare il contenuto di un oggetto di riferimento (proprietà su un oggetto, elementi in una matrice, elementi in una tabella hash). Cosa non puoi cambiare senza usare '$ global:' è l'oggetto reale (array/hashtable) dei riferimenti alle variabili. –