Использование таблицы как недооценки является способом контроля видимости данных.См. Видимость и значения в Справочном руководстве по Lua 4.0.
Ваши данные хранятся в таблице, локальной для функции.Эту таблицу нельзя увидеть вне этой функции.
Пример:
function a()
local t = {data = 123}
return function()
print(t.data)
end
end
Тогда:
b = a()
b() -- prints “123”
Плохая практика - использовать буквы для функцииимена, но это помогает понять: b
это просто таблица, возвращаемая из вызова a
.Но этот b
при вызове печатает данные, хранящиеся в локальной таблице a
t
. Нет другого способа доступа к t
, поэтому вы можете контролировать доступ к таблице.Добавьте дополнительные функциональные возможности (сеттеры, геттеры, другие логики) к таблице возврата a
для контроля доступа.
Другой пример
Отображение доступа к геттеру и сеттеру:
function a()
local t = {data = nil}
local function set(data)
t.data = data
end
local function get()
return t.data
end
return {
set = set,
get = get
}
end
b = a()
b.set("abc")
print(b.get())
b.set(123)
print(b.get())
Печать:
abc
123