Dans le scripting, un bloc de code est le corps d'une structure de contrôle ou fonction. Le scop d'une variable ou d'une fonction est le bloc de code qui peut l'accéder, et il peut être 2>global2> ou 5>local5>. Tous les blocs peuvent accéder aux variables et fonctions globales. Un bloc peut acc
Les variables et les fonctions ont un champ d'application global par défaut, mais il est presque toujours préférable de les déclarer avec un champ d'application local parce que Luau accède aux variables et aux fonctions locales plus rapidement que les globales. Pour donner un champ d'application local à une variable ou à une fonction, mettez le mot-clé local avant son nom lorsque vous le déclarez.
Les scripts ne peuvent pas accéder aux variables globales et locales ou aux fonctions dans d'autres scripts. Si vous voulez partager des valeurs et des fonctions entre les scripts, utilisez ModuleScripts .
local helloWorld = 'Hello World!'
local function printHelloWorld()
print(helloWorld)
end
printHelloWorld() -- Hello World!
- Le bloc B peut accéder à la variable locale dans le bloc A.
- Le bloc C peut accéder aux variables et aux fonctions locales dans les blocs A et B.
- Le bloc A ne peut pas accéder aux variables et aux fonctions locales dans les blocs B ou C.
- Le bloc B ne peut pas accéder à la variable locale dans le bloc C.
Portée globale
Après avoir déclaré une variable globale ou une fonction, n'importe quelle partie du code dans le même script peut l'accéder. Les variables et les fonctions ont un champ d'application global à moins que vous les déclariez avec le local mot-clé.
Dans le code suivant, testVar a un champ d'application global dans la fonction testFunc() locale. Lorsque Luau appelle la fonction testFunc(), il attribue à 1> testVar1> la valeur
Example of global functions and variables
local function testFunc() -- rayon local
testVar = 64 -- portée globale
end
testFunc()
print(testVar) -- 64
Dans le code suivant, la variable globale x commence à 0 , augmente de 1 avec chaque itération du 1>2> for2> boucle1> , et imprime à nouveau ensuite avec une valeur finale de 4.
x = 0 -- 变量 globale « x »for i = 1, 4 dox += 1print("Global 'x' = " .. x)endprint("Global 'x' = " .. x)--[[ Résultat de sortie:Global 'x' = 1Global 'x' = 2Global 'x' = 3Global 'x' = 4Global 'x' = 4]]
Il est plus facile de déclarer les variables globales et les fonctions car vous n'avez pas besoin de taper autant, mais les variables globales et les fonctions ont les avantages suivants par rapport aux variables locales :
- Luau accède à des variables et des fonctions globales avec une recherche de hachage, il est donc coûteux à utiliser en termes de performance. L'utilisation d'une variable globale dans un boucle de temps peut la rendre plus lente de plus de 10 % en utilisant une variable locale dans le même boucle.
- Luau supprime les variables locales après la fin de leur portée, ce qui réduit l'utilisation de la mémoire.
- Vous pouvez accéder aux variables globales et aux fonctions dans le même script, mais pas entre plusieurs scripts. Ainsi, une variable globale ou une fonction ne fournit aucun avantage sur un équivalent local dans le champ, un upvalue ou un shadow.
Rayon local
Luau ne peut accéder qu'à une variable ou une fonction locale dans le bloc de code où vous la déclarez. Créer une variable avec un champ d'application local vous donne un contrôle plus serré sur quand et où son valeur change.
Dans le code suivant, la fonction testFunc() et la variable
local function testFunc() -- rayon local
local testVar = 64 -- rayon local
print(testVar) -- 64
end
testFunc()
print(testVar) -- nil
Dans le code suivant, la variable locale x a la valeur 0 à la ligne 1. Avec Luau qui itère à travers le for boucle, une autre variable locale 3> x3> a la valeur 6> 1</
local x = 0 -- 变量 locale "x"for i = 1, 4 dolocal x = 1 -- Diverses variables « x », locales pour ce « pour » boucleprint("Loop 'x' = " .. x)endprint("Initial 'x' = " .. x)--[[ Résultat de sortie:Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Initial 'x' = 0]]
Capturer
Après avoir déclaré et attribué une variable locale, vous pouvez la lire dans son niveau de champ d'application et ses fonctions dont les champ d'application sont incluses par le même champ contenant la variable locale. Cette technique est connue comme capturer .
Dans le code suivant, la fonction f capture la variable locale x. La variable x dans 1> f1> est un 4> upvalue 4> .
local x = 5
local function f()
print(x)
end
f() -- 5
print(x) -- 5
Ombre
Après avoir déclaré et attribué une variable locale, vous pouvez la lire dans son niveau de champ d'application et dans les niveaux de champ descendant. Si vous réassigner la variable dans un champ d'application descendant, vous créez une nouvelle variable locale avec le même nom mais une valeur différente de la valeur la plus précédente. La nouvelle variable locale n'affecte pas la variable locale de l'assignation précédente. Cette technique, connue sous le nom de ombrage , vous a
Dans le code suivant, Luau ombre la variable x . La variable x dans f() est une variable de 1>ombre1>.
local x = 5
local function f()
local x = 7
print(x)
end
f() -- 7
print(x) -- 5
Vous pouvez également réassigner une variable locale sans attribuer une valeur à elle afin que vous puissiez réassigner la variable dans ses niveaux de champ d'application et de niveau de description. Réassigner une variable locale sans attribuer de valeur à elle définit sa valeur sur nil.
Dans le code suivant, Luau ombre la variable locale
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) -- Limon
print(fruit .. ", not " .. fruitName) -- Lemon, not Chocolate