2014-06-26 34 views
9

Ho variabili globali e desidero utilizzarle con una funzione.PowerShell Variabili globali variabili locali

Non uso variabili locali con lo stesso nome all'interno delle funzioni!

# global vars: 
$Var1 = @{ .. } 
$Var2 = @(..) 
function testing{ 
    $Var1.keyX = "kjhkjh" 
    $Var2[2] = 6.89768 
} 

lo faccio e funziona, ma è sicuro o devo usare:

$Global:Var1.keyX = "kjhkjh" 

Grazie, gooly

risposta

20

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 
+1

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

+0

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. –