Я использую квази модульный подход "Из таблицы - Использование локальных локально", как описано на на этой странице .
local M = {}
-- private
local x = 1
local function baz() print 'test' end
local function foo() print("foo", x) end
M.foo = foo
local function bar()
foo()
baz()
print "bar"
end
M.bar = bar
return M
Однако я не добавляю функции и т. Д. В таблицу модулей после определения функции. Вместо этого я делаю это внизу файла.
local x = 1
local function baz() print 'test' end
local function foo() print("foo", x) end
local function bar()
foo()
baz()
print "bar"
end
local M = {
bar = bar,
foo = foo,
}
return M
Как ясно видно, M
является локальной переменной. Я задавался вопросом, если изменение на
local x = 1
local function baz() print 'test' end
local function foo() print("foo", x) end
local function bar()
foo()
baz()
print "bar"
end
return {
bar = bar,
foo = foo,
}
эквивалентно. Я полагаю, что возвращаемая таблица является глобальной, но на самом деле, если бы я использовал этот модуль в другом, например
local foo = require 'foomodule'
это не будет иметь значения (с точки зрения производительности), потому что я привязываю локальную переменную foo
к возвращаемой таблице.