W skryptach, blok kodu jest ciałem struktury kontrolnej lub funkcji. zakres zmiennej lub funkcji może być blokiem kodu, który może na nią uzyskać dostęp, i może być 2>globalny2> lub 5>lokalny5>. Wszystkie bloki mogą uzyska
Zmienne i funkcje mają globalny zakres domyślnie, ale zawsze lepiej deklarować je lokalnie, ponieważ Luau uzyskuje dostęp do lokalnych zmiennych i funkcji szybciej niż globalne. Aby dać zmiennej lub funkcji lokalny zakres, wpisz słowo kluczowe local przed jego nazwą, gdy go deklarujesz.
Skrypty nie mogą uzyskać dostępu do globalnych i lokalnych zmiennych lub funkcji w innych skryptach. Jeśli chcesz dzielić się wartościami i funkcjami między skryptami, użyj ModuleScripts .
local helloWorld = 'Hello World!'
local function printHelloWorld()
print(helloWorld)
end
printHelloWorld() -- Hello World!
- Blok B może uzyskać dostęp do lokalnej zmiennej w bloku A.
- Blok C może uzyskać dostęp do lokalnych zmiennej i funkcji w blokach A i B.
- Blok A nie może uzyskać dostępu do lokalnych zmiennej i funkcji w blokach B lub C.
- Blok B nie może uzyskać dostępu do lokalnej zmiennej w bloku C.
Globalny zakres
Po zadeklarowaniu globalnej zmiennej lub funkcji, każdy blok kodu w tym samym skrypcie może na niego zezwalać. zmienne i funkcje mają globalny zakres, chyba że zadeklarujesz je z local słowem kluczowym.
W następującym kodzie testVar ma globalny zakres w lokalnej funkcji testFunc(). Gdy Luau wzywa funkcję testFunc(), przypisuje 1> testVar1>
Example of global functions and variables
local function testFunc() -- lokalny zakres
testVar = 64 -- ogólny zakres
end
testFunc()
print(testVar) -- 64
W następnym kodzie globalna zmienne x zaczyna się od 0 , wzrasta o 1 z każdym przypływem 1>2> for2> pętli, a następnie wydrukuje ponownie z ostateczną wartością 4.
x = 0 -- Globalna zmienne "x"for i = 1, 4 dox += 1print("Global 'x' = " .. x)endprint("Global 'x' = " .. x)--[[ Wyświetlany wynik:Global 'x' = 1Global 'x' = 2Global 'x' = 3Global 'x' = 4Global 'x' = 4]]
Łatwiej jest deklarować globalne zmienne i funkcje, ponieważ nie musisz wpisywać tyle, ale globalne zmienne i funkcje mają następujące wady w porównaniu do lokalnych:
- Luau uzyskuje globalne zmienne i funkcje z użyciem haszuk, więc jest drogie w użyciu pod względem wykonywanie. Używanie globalnej zmiennej w czasie krytycznym może go wykonać ponad 10% wolniej niż używanie lokalnej zmiennej w tym samym okręgu.
- Luau usuwa lokalne zmienne po zakończeniu ich zakresu, co zmniejsza użycie pamięci.
- Możesz uzyskać dostęp do globalnych zmiennych i funkcji w tym samym skrypcie, ale nie pomiędzy poszczególnymi skryptami. Dlatego globalna zmiana lub funkcja nie zapewnia żadnej korzyści nad lokalnym równowartością, up value lub cieniem.
Lokalny zakres
Luau może uzyskać dostęp tylko do lokalnej zmiennej lub funkcji w bloku kodu, w którym ją deklarujesz. Stworzenie zmiennej z zasięgiem lokalnym daje Ci bardziej szczelny kontrolę nad tym, kiedy i gdzie zmienia się jej wartość.
W następnym kodzie funkcja testFunc() i zmienne
local function testFunc() -- lokalny zakres
local testVar = 64 -- lokalny zakres
print(testVar) -- 64
end
testFunc()
print(testVar) -- nil
W następującym kodzie lokalna zmienne x ma wartość 0 na linii 1. Jak Luau przetwarza się przez pętę for , inną lokalną zmienną 2> x2> ma wartość 5>
local x = 0 -- Lokalna zmiana "x"for i = 1, 4 dolocal x = 1 -- Różne zmienne "x", lokalne dla tego "for" pętlaprint("Loop 'x' = " .. x)endprint("Initial 'x' = " .. x)--[[ Wyświetlany wynik:Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Initial 'x' = 0]]
Kapitulowanie
Po zadeklarowaniu i przypisaniu lokalnej zmiennej możesz ją przeczytać na jej poziomie zakresu i funkcji, której zakres jest zamknięty przez tę samą skalę zawierającą lokalną zmienną. Ta technika jest znana jako kapturuj .
W następnym kodzie funkcja f złapa lokalną zmienne x. Variant x w 1> f1> jest 4> up value4> .
local x = 5
local function f()
print(x)
end
f() -- 5
print(x) -- 5
Cieniowanie
Po zadeklarowaniu i przypisaniu lokalnej zmiennej możesz ją przeczytać na jej poziomie zakresu i poziomie zakresu potomnego. Jeśli zdeklarujesz i przypiszesz zmienną lokalnie na poziomie zakresu potomnego, to stworzysz nową lokalną zmienną z tego samego imienia, ale z inną wartością od najbardziej poprzedniego przydział
W następnym kodzie Luau zaznacza zmienne x . zmienne x w f() jest zmienną 1>cień1>.
local x = 5
local function f()
local x = 7
print(x)
end
f() -- 7
print(x) -- 5
Możesz również ponownie zadeklarować lokalną zmienne bez przypisania jej wartości, abyś mógł ponownie przypisać zmienne w obu poziomach zakresu i poziomach pochodzących. Reduplikowanie lokalnej zmienne bez przypisania wartości ustawia jego wartość na nil .
W następującym kodzie Luau zmienia l
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) -- Cytryna
print(fruit .. ", not " .. fruitName) -- Lemon, not Chocolate