0Pricing
Lua Academy · Урок

Что такое внешние значения?

Изучите, как замыкания захватывают переменные из окружающих областей видимости в качестве внешних значений.

«Что такое внешние значения?» — бесплатный урок Lua Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.

Повторение: замыкания

Замыкание — это функция, объединённая со ссылками на переменные из охватывающей её области видимости. Такие захваченные переменные называются внешними значениями.

Пример внешнего значения

Внутренняя функция захватывает count из области видимости внешней функции.

local function makeCounter()
  local count = 0
  return function()
    count = count + 1
    return count
  end
end
local next = makeCounter()
print(next())  -- 1
print(next())  -- 2

Замыкания используют живые переменные

Замыкания используют не копии, а ссылки на переменные. Замыкание может как читать их, так и изменять.

Несколько внешних переменных

Замыкание может захватывать несколько переменных из нескольких внешних областей видимости.

local function adder(x)
  return function(y) return x + y end
end
local add5 = adder(5)
print(add5(3))  -- 8

Время жизни внешней переменной

Внешние переменные существуют, пока существует хотя бы одно ссылающееся на них замыкание. Они собираются сборщиком мусора только после удаления всех ссылающихся на них замыканий.

debug.getupvalue

Вы можете просмотреть внешние переменные с помощью debug.getupvalue(fn, n): функция возвращает имя и значение внешней переменной с номером n.

local x = 10
local function f() return x end
print(debug.getupvalue(f, 1))  -- x  10

Внешняя переменная и глобальная переменная

Внешние переменные (локальные переменные, захваченные замыканиями) работают быстрее глобальных. VM обращается к ним напрямую по индексу, без поиска в таблице.

Замкнутая внешняя переменная

Когда внешний блок завершается, внешняя переменная замыкается: она перемещается из стека в кучу. Замыкание продолжает совместно использовать эту ячейку в куче.

Открытые и замкнутые внешние переменные

Открытая: внешняя переменная всё ещё находится в стеке (внешняя функция продолжает выполняться). Замкнутая: внешняя переменная перемещена в кучу после завершения внешней области видимости.

Практический пример

Внешние переменные естественным образом реализуют приватное состояние в замыканиях: функция модуля может хранить приватное состояние, не делая его глобальным.

local id = 0
local function newId()
  id = id + 1
  return id
end

Ограничение на число внешних переменных

Каждая функция Lua может ссылаться максимум на 255 внешних переменных. На практике это редко становится проблемой.

Вопрос о внешних переменных

Что такое внешняя переменная?

Итоги: внешние переменные

Внешние переменные — это внешние переменные, захваченные замыканием. После завершения внешней области видимости они сохраняются в куче, совместно используются по ссылке и обеспечивают приватное изменяемое состояние без глобальных переменных.

Часто задаваемые вопросы

Урок «Что такое внешние значения?» бесплатный?

Да — полный текст урока «Что такое внешние значения?» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.

Чему я научусь в уроке «Что такое внешние значения?»?

Изучите, как замыкания захватывают переменные из окружающих областей видимости в качестве внешних значений. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Lua Academy?

Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Что такое внешние значения?»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Lua Academy?

Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Что такое внешние значения?
  2. Общие внешние значения замыканий
  3. Функции-фабрики и генераторы
  4. Мемоизация с замыканиями
← Назад к Lua Academy