Ambito

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

In scripting, un blocco di codice è il corpo di una struttura di controllo o funzione. L'ambito di una variabile o funzione è il blocco di codice che può accedervi, e può essere globale o locale. Tutti i blocchi possono accedere a variabili e funzioni globali. Un blocco può accedere a variabili e funzioni locali nel suo blocco genitore, ma non in nessuno dei suoi blocchi figli.

Le variabili e le funzioni hanno ambito globale per impostazione predefinita, ma è quasi sempre meglio dichiararle con ambito locale perché Luau accede a variabili e funzioni locali più velocemente rispetto a quelle globali. Per dare a una variabile o funzione un ambito locale, metti la parola chiave local prima del suo nome quando la dichiari.

Gli script non possono accedere a variabili o funzioni globali e locali in altri script. Se desideri condividere valori e funzioni tra script, utilizza ModuleScripts.

local helloWorld = 'Hello World!'
local function printHelloWorld()
print(helloWorld)
end
printHelloWorld() -- Hello World!
  • Il blocco B può accedere alla variabile locale nel blocco A.
  • Il blocco C può accedere alle variabili e funzioni locali nei blocchi A e B.
  • Il blocco A non può accedere alle variabili e funzioni locali nei blocchi B o C.
  • Il blocco B non può accedere alla variabile locale nel blocco C.

Ambito globale

Dopo aver dichiarato una variabile o funzione globale, qualsiasi blocco di codice nello stesso script può accedervi. Le variabili e le funzioni hanno ambito globale a meno che non le dichiari con la parola chiave local.

Nel seguente codice, testVar ha ambito globale all'interno della funzione locale testFunc(). Quando Luau chiama testFunc(), assegna a testVar il valore 64. testVar ha ambito globale, quindi la funzione print() al di fuori di testFunc() può accedervi e stampare 64.

Esempio di funzioni e variabili globali
local function testFunc() -- ambito locale
testVar = 64 -- ambito globale
end
testFunc()
print(testVar) -- 64

Nel seguente codice, la variabile globale x inizia a 0, incrementa di 1 ad ogni iterazione del for loop, e stampa di nuovo dopo con un valore finale di 4.

x = 0 -- Variabile globale "x"
for i = 1, 4 do
x += 1
print("Globale 'x' = " .. x)
end
print("Globale 'x' = " .. x)
--[[ Risultato:
Globale 'x' = 1
Globale 'x' = 2
Globale 'x' = 3
Globale 'x' = 4
Globale 'x' = 4
]]

È più facile dichiarare variabili e funzioni globali perché non devi digitare tanto, ma le variabili e le funzioni globali hanno i seguenti svantaggi rispetto a quelle locali:

  • Luau accede a variabili e funzioni globali con una ricerca hash, quindi è costoso in termini di prestazioni. Utilizzare una variabile globale in un ciclo critico per il tempo può farlo eseguire più del 10% più lentamente rispetto all'utilizzo di una variabile locale nello stesso ciclo.
  • Luau elimina le variabili locali dopo che il loro ambito termina, riducendo l'uso della memoria.
  • Puoi accedere a variabili e funzioni globali all'interno dello stesso script, ma non tra più script. Pertanto, una variabile o funzione globale non offre alcun vantaggio rispetto a un equivalente locale in ambito, un upvalue, o un shadow.

Ambito locale

Luau può accedere solo a una variabile o funzione locale nel blocco di codice in cui la dichiari. Creare una variabile con ambito locale ti dà un controllo più stretto su quando e dove il suo valore cambia.

Nel seguente codice, la funzione testFunc() e la variabile testVar hanno ambito locale. Solo il codice all'interno di testFunc() può accedere alla variabile testVar. La variabile testVar non ha un valore al di fuori di testFunc(), quindi chiamando print(testVar) all'interno di testFunc() stampa il valore di testVar, ma chiamando print(testVar) al di fuori di testFunc() stampa nil.

local function testFunc() -- ambito locale
local testVar = 64 -- ambito locale
print(testVar) -- 64
end
testFunc()
print(testVar) -- nil

Nel seguente codice, la variabile locale x ha valore 0 alla riga 1. Mentre Luau itera attraverso il for loop, una diversa variabile locale x ha valore 1. Poi, Luau stampa la variabile iniziale x con un valore invariato di 0.

local x = 0 -- Variabile locale "x"
for i = 1, 4 do
local x = 1 -- Variabile diversa "x", locale per questo "for" loop
print("Loop 'x' = " .. x)
end
print("Iniziale 'x' = " .. x)
--[[ Risultato:
Loop 'x' = 1
Loop 'x' = 1
Loop 'x' = 1
Loop 'x' = 1
Iniziale 'x' = 0
]]

Le variabili e le funzioni const seguono le stesse regole di ambito delle local. Puoi dichiararle in qualsiasi blocco, anche all'interno di un'altra funzione. Per ulteriori informazioni su const, vedere Variabili const.

Cattura

Dopo aver dichiarato e assegnato una variabile locale, puoi leggerla nel suo livello di ambito e nelle funzioni il cui ambito è racchiuso dallo stesso ambito contenente la variabile locale. Questa tecnica è nota come cattura.

Nel seguente codice, la funzione f cattura la variabile locale x. La variabile x in f() è un upvalue.

local x = 5
local function f()
print(x)
end
f() -- 5
print(x) -- 5

Ombra

Dopo aver dichiarato e assegnato una variabile locale, puoi leggerla nel suo livello di ambito e nei livelli di ambito discendenti. Se ridichiari e riassegni la variabile in un livello di ambito discendente, allora crei una nuova variabile locale con lo stesso nome ma un valore diverso dall'assegnazione più recente. La nuova variabile locale non influisce sulla variabile locale dall'assegnazione precedente. Questa tecnica, nota come ombreggiatura, ti aiuta a riutilizzare il nome di una variabile senza riutilizzarne il valore.

Nel seguente codice, Luau ombreggia la variabile x. La variabile x in f() è una variabile di ombra.

local x = 5
local function f()
local x = 7
print(x)
end
f() -- 7
print(x) -- 5

Puoi anche ridichiarare una variabile locale senza assegnarle un valore in modo da poter riassegnare la variabile sia nel suo livello di ambito che nei livelli di ambito discendenti. Ridichiarare una variabile locale senza assegnarle un valore imposta il suo valore a nil.

Nel seguente codice, Luau ombreggia la variabile locale fruitName nella funzione getFruitByColor(). La funzione ridichiara fruitName come una nuova variabile di ombra e imposta il suo valore a nil. La funzione ha un livello di ambito discendente, un for loop, che assegna un valore a fruitName. Dopo il ciclo for, la funzione restituisce la variabile di ombra fruitName. Per tutta la durata della funzione, fruitName è la stessa variabile locale che non sovrascrive la variabile locale iniziale fruitName.

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) -- Lemon
print(fruit .. ", non " .. fruitName) -- Lemon, non Chocolate
© 2026 Roblox Corporation. Roblox, il logo Roblox e Powering Imagination sono tra i nostri marchi registrati e non registrati negli Stati Uniti. e altri paesi.