2013-08-23 2 views

ответ

4

По определению все внешние локальные переменные, используемые в функции, считаются значениями upvalues. Как уже упоминалось, в Lua 5.2 есть также скрытое значение up для среды, если функция использует глобальные переменные.

Возможно, вы захотите прочитать байт-код, сгенерированный для вашего кода, с помощью luac -l -l.

Что может вас смутить, так это определение fB в теле fA. Напомним, что function fB() print(b) end - это просто сахар для fB = function() print(b) end. Когда вы это сделаете, ясно, что b используется в fA, а также что вы назначаете глобальную переменную fB. Следовательно, вы получаете 3 upvalues ​​за fA в Lua 5.2. (Использование print также подразумевает, что fA использует глобальные переменные.) Если вы используете local function fB ... и удалите print, вы увидите, что fA использует 2 upvalues ​​как в 5.1, так и в 5.2.

2

Реализация определена; это может быть один или два. Или три (одно значение для окружающей среды). Вы не знаете, и вы должны никогда должны заботиться.

Смежные вопросы