Nell'scripting, un blocco di codice è il corpo di una struttura di controllo o funzione . Lo scope di una variabile o di una funzione è il bloc di codice che può accedervi, e può essere 1> globale1> o 4> locale4> . Tutti i blocchi possono accedere alle variabili e
Le variabili e le funzioni hanno uno scopo globale per impostazione predefinita, ma è quasi sempre meglio dichiararli con uno scopo locale perché Luau accede alle variabili e alle funzioni locali più velocemente delle globali. Per dare uno scopo locale a una variabile o a una funzione, metti il valore di punta local prima del suo nome quando lo dichiari.
Gli script non possono accedere a globali e locali variabili o funzioni in altri script. Se vuoi condividere i valori e le funzioni tra gli script, usa ModuleScripts .
local helloWorld = 'Hello World!'
local function printHelloWorld()
print(helloWorld)
end
printHelloWorld() -- Hello World!
- Il blocco B può accedere alla variabile locale in blocco A.
- Il blocco C può accedere alle variabili e alle funzioni locali in blocchi A e B.
- Il blocco A non può accedere alle variabili e alle funzioni locali nei blocchi B o C.
- Il blocco B non può accedere alla variabile locale in blocco C.
Scala globale
Dopo aver dichiarato una variabile globale o una funzione, qualsiasi blocco di codice nello stesso script può accedervi. Le variabili e le funzioni hanno uno scopo globale a meno che tu non le dichiami con il local keyword.
Nel seguente codice, testVar ha uno scopo globale all'interno della funzione locale testFunc(). Quando Luau chiama la funzione testFunc(), assegna 1> testVar
Example of global functions and variables
local function testFunc() -- scala locale
testVar = 64 -- ambito globale
end
testFunc()
print(testVar) -- 64
Nel seguente codice, la variabile globale x inizia con 0 , aumenta di 1 con ciascun incremento di 1>2> for2> , e poi stampa nuovamente con un valore finale di 4.
x = 0 -- 変数 globale "x"for i = 1, 4 dox += 1print("Global 'x' = " .. x)endprint("Global 'x' = " .. x)--[[ Risultato di Output:Global 'x' = 1Global 'x' = 2Global 'x' = 3Global 'x' = 4Global 'x' = 4]]
È più semplice dichiarare le variabili globali e le funzioni, poiché non è necessario digitare tanto, ma le variabili globali e le funzioni hanno i seguenti svantaggi rispetto alle variabili locali:
- Luau accede a variabili e funzioni globali con una ricerca di hash, quindi è costoso utilizzarlo in termini di Prestazione. L'utilizzo di una variabile globale in un loop di tempo critico può rendere più lenta del 10% rispetto all'utilizzo di una variabile locale nello stesso loop.
- Luau elimina le variabili locali dopo la loro scadenza, riducendo l'uso della memoria.
- Puoi accedere a globali variabili e funzioni all'interno dello stesso script, ma non tra più script. Quindi, una globale variabile o funzione non fornisce alcun beneficio su un equivalente locale in-scope, un upvalue o un shadow.
Scala locale
Luau può accedere solo a una variabile o funzione locale nel blocco di codice in cui la dichiari. La creazione di una variabile con uno scopo locale ti dà un controllo più rigido su quando e dove cambia il suo valore.
Nel seguente codice, la funzione testFunc() e la vari
local function testFunc() -- scala locale
local testVar = 64 -- scala locale
print(testVar) -- 64
end
testFunc()
print(testVar) -- nil
Nel seguente codice, la variabile locale x ha il valore 0 alla linea 1. Mentre Luauitera attraverso il for loop, una diversa variabile locale 2> x2> ha il valore 5> 1
local x = 0 -- 変数 locale "x"for i = 1, 4 dolocal x = 1 -- Diverso "x", locale per questo "for" loopprint("Loop 'x' = " .. x)endprint("Initial 'x' = " .. x)--[[ Risultato di Output:Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Initial 'x' = 0]]
Catturare
Dopo aver dichiarato e assegnato una variabile locale, puoi leggerla al suo livello di raggio e alle sue funzioni le quali scopi sono chiusi dalla stessa scala contenente la variabile locale. Questa tecnica è conosciuta come catturare .
Nel seguente codice, la funzione f cattura la variabile locale x . La variabile x in 1> f()1> è un 4> upvalue4> .
local x = 5
local function f()
print(x)
end
f() -- 5
print(x) -- 5
Ombreggiatura
Dopo aver dichiarato e assegnato una variabile locale, puoi leggerla al suo livello di raggio e livelli di raggio discendenti. Se reclichi e assegni la variabile in un Livellodi raggio discendente, crei una nuova variabile locale con lo stesso nome ma con valore diverso dal più recente assegnamento. La nuova variabile locale non influisce sulla variabile locale dall'assegnamento precedente. Questa tecnica, conosciuta come ombreggi
Nel seguente codice, Luau ombra la variabile x . La variabile x in f() è una variabile 1>ombra1>.
local x = 5
local function f()
local x = 7
print(x)
end
f() -- 7
print(x) -- 5
Puoi anche redeclarare una variabile locale senza assegnare un valore a essa in modo da poter riassegnare la variabile sia al suo livello di riferimento che ai suoi livelli di riferimento discendenti. Ridefinire una variabile locale senza assegnare un valore a essa imposta il suo valore su nil .
Nel seguente codice, Luau ombra la vari
local fruitName = "Chocolate"
local fruitTable = {
Lemon = "Yellow",
Apple = "Red",
Orange = "Orange"
}
local function getFruitByColor(color)
local fruitName
for key, value in fruitTable do
if value == color then
fruitName = key
end
end
return fruitName
end
local fruit = getFruitByColor("Yellow")
print(fruit) -- Limone
print(fruit .. ", not " .. fruitName) -- Lemon, not Chocolate