2016-10-23 2 views
1

Alors disons que j'ai un fichier lua, et en haut, je définir une variable en dehors de toute fonction, mais je l'appelle localevariables locales dans le contexte global Lua

local x = 1 

Est-ce qu'il ya une différence entre ce local x, et un global x?

+1

Vous ne pouvez pas vraiment définir une variable en dehors d'une fonction parce qu'un script est compilé en tant que [corps de la fonction] (https://www.lua.org/manual/5.3/manual.html#3.3 .2). –

Répondre

8

Oui, car il est local au chunk qu'il est créé.

Lua gère un morceau comme le corps d'une fonction anonyme avec un nombre variable d'arguments (voir §3.4.11). En tant que tels, les morceaux peuvent définir des variables locales, recevoir des arguments et renvoyer des valeurs. De plus, cette fonction anonyme est compilée comme dans le cadre d'une variable locale externe appelée _ENV (voir §2.2). La fonction résultante a toujours _ENV comme seule valeur d'up, même si elle n'utilise pas cette variable.

Prenons cet exemple:

-- main.lua 
require 'other' 
print(x, y) 

-- other.lua 
local x = 5 
y = 10 

Cette imprimera nil, 10, depuis x était local au morceau, tandis que y a été affecté en tant que upvalue pour selon environnement le morceau a été chargé dans

Voir aussi:.

Et notez que la sémantique de environnements changé entre lua5.1 et Lua5.2: