In Scriptingist ein Block von Code die Körper einer Kontrollstruktur oder Funktion. Der Umfang einer Variable oder Funktion ist der Block von Code, der auf sie zugreifen kann, und er kann global oder lokal sein. Alle Blöcke können auf globale Variablen und Funktionen zugreifen. Ein Block kann auf lokale Blöcke und Funktionen in seinem Eltern
Variable und Funktionen haben standardmäßig globale Reichweite, aber es ist fast immer besser, sie mit lokaler Reichweite zu deklarieren, da Luau lokale Variablen und Funktionen schneller als globale zugreift. Um eine Variable oder Funktion lokale Reichweite zu geben, fügen Sie dem Namen der Variable local vor dem Keyword, wenn Sie sie deklarieren.
Skripte können keine globalen und lokalen Variablen oder Funktionen in anderen Skripts aufrufen. Wenn Sie Werte und Funktionen zwischen Skripts teilen möchten, verwenden Sie ModuleScripts.
local helloWorld = 'Hello World!'
local function printHelloWorld()
print(helloWorld)
end
printHelloWorld() -- Hello World!
- Block B kann Zugriff auf die lokale Variable in Block A.
- Block C kann Zugriff auf lokale Variablen und Funktionen in Blöcken A und B haben.
- Block A kann nicht auf lokale Variablen und Funktionen in Blöcken B oder C zugreifen.
- Block B kann nicht auf lokale Variable in Block C zugreifen.
Globale Reichweite
Nachdem du eine globale Variable oder Funktion erklärst, kann jeder Block von Code im selben Skript auf sie zugreifen. Variablen und Funktionen haben globale Reichweite, es sei denn, du erklärst sie mit dem local-Kennwort.
Im folgenden Codeshat testVar globale Reichweite innerhalb der lokalen testFunc() -Funktion. Wenn Luau die testFunc() aufruft, weist 1> testVar1> den Wert
Example of global functions and variables
local function testFunc() -- lokales zielfernrohr
testVar = 64 -- globale reichweite
end
testFunc()
print(testVar) -- 64
Im folgenden Codesbeginnt die globale Variable x bei 0 und erhöht sich um 1 mit jedem Iter der 1>2> for2> -Schleife1>, und druckt dann wieder mit einem finalen Wert von 4 ab.
x = 0 -- Globale Variable "x"for i = 1, 4 dox += 1print("Global 'x' = " .. x)endprint("Global 'x' = " .. x)--[[ Ergebnis:Global 'x' = 1Global 'x' = 2Global 'x' = 3Global 'x' = 4Global 'x' = 4]]
Es ist einfacher, globale Variablen und Funktionen zu erklären, da Sie nicht so viel eingeben müssen, aber globale Variablen und Funktionen haben die folgenden Nachteile im Vergleich zu lokalen:
- Luau greift auf globale Variablen und Funktionen mit einem Hashen-Suchaufruf zu, so dass es teuer ist, in Erfüllungzu verwenden. Wenn Sie eine globale Variable in einem zeitkritischen Loop verwenden, kann es mehr als 10% schneller sein als die Verwendung einer lokalen Variable in derselben Loop.
- Luau bietet lokale Variablen nach dem Ende ihres Speicherbereichs, wodurch der Speicherverbrauch reduziert wird.
- Du kannst globale Variablen und Funktionen innerhalb desselben Skript, das. PL: die Skriptsaufrufen, aber nicht zwischen mehreren Skripts. Daher bietet eine globale Variable oder Funktion keinen Vorteil über einen in-Scope-Lokalen Equivalent, einen Upgrade-Wert oder einen Shadow.
Lokales Zielfernrohr
Luau kann nur auf lokale Variablen oder Funktionen im Block von Code zugreifen, in denen Sie sie erklären. Wenn Sie eine Variable mit lokale Reichweite erstellen, haben Sie eine engere Kontrolle darüber, wann und wo sich der Wert ändert.
Im folgenden Codeshaben die Funktion testFunc() und die Variable
local function testFunc() -- lokales zielfernrohr
local testVar = 64 -- lokales zielfernrohr
print(testVar) -- 64
end
testFunc()
print(testVar) -- nil
Im folgenden Codes, die lokale Variable x hat den Wert 0 an der Zeile 1. Wenn Luau durch die for -Schleife druckt, eine andere lokale Variable 2> x2> hat den Wert 5>
local x = 0 -- Lokale Variable "x"for i = 1, 4 dolocal x = 1 -- Unterschiedliche Variable "x", lokal für diesen "for" Loopprint("Loop 'x' = " .. x)endprint("Initial 'x' = " .. x)--[[ Ergebnis:Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Initial 'x' = 0]]
Einnehmen
Nachdem du eine lokale Variable erklärt und zugewiesen hast, kannst du sie in ihrem Scope-Level und Funktionen, deren Scope durch dieselbe Scope mit der lokalen Variable umgeben ist, lesen. Diese Technik wird als Erfassen bekannt.
Im folgenden Codesk captures die lokale Variable f. Die Variable x in x ist ein 2> Upvalue2>.
local x = 5
local function f()
print(x)
end
f() -- 5
print(x) -- 5
Schattierung
Nachdem du eine lokale Variable erklärt und zugewiesen hast, kannst du sie in ihrem Scope-Level und in ihrem Abwärtsscope-Level lesen. Wenn du die Variable in einem Stufeerneut erklärst und zugewiesen hast, erstellst du eine neue lokale Variable mit dem gleichen Namen, aber verschiedenen Wert von der most vorherigen Zuweisung. Die neue lokale Variable betrifft nicht die lokale Vari
Im folgenden Codesüberträgt Luau die Variable x . Die Variable x in f() ist eine 1>Schatten1>-Variable.
local x = 5
local function f()
local x = 7
print(x)
end
f() -- 7
print(x) -- 5
Sie können auch eine lokale Variable erneut zuordnen, ohne dem Wert eine Beziehung zuzuweisen, so dass Sie den Wert in beiden ihres Speicherbereichs und absteigenden Speicherbereichs wiederzuweisen können. Wiederzuordnen eine lokale Variable ohne das Zuweisen eines Wertes zuweisen, setzt den Wert auf nil .
Im folgenden Codesüberträgt Luau die lokale 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) -- Zitrone
print(fruit .. ", not " .. fruitName) -- Lemon, not Chocolate