Насколько я понимаю, существует несколько способов определения функции-члена для таблицы в Lua.Например, следующие два, кажется, эквивалентны:
-- method a)
local table1 = {x = 1, y = 2}
function table1:myfunc()
return self.x + self.y
end
-- method b)
local table2 = {
x = 1,
y = 2,
myfunc = function(self)
return self.x + self.y
end,
}
Ранее использовав Python, мой инстинкт должен был бы использовать метод b) для более аккуратной группировки вещей.Однако, читая примеры, кажется, что люди обычно используют метод а) по соглашению.Я не могу найти какой-либо объективной причины того, почему она должна быть лучше.
Действительно, кажется, что, наоборот, есть причины, по крайней мере, заранее объявить переменную функции при инициализации таблицы, например,:
local table3 = {x = 1, y = 2, myfunc}
function table3:myfunc()
return self.x + self.y
end
Таким образом, Lua знает о существовании члена с самого начала и может правильно настроить хэши, тогда как увеличение числа членов в существующей таблице может потребовать перефразировки (хотя я могу 'Я не представляю, что это когда-нибудь станет заметной проблемой производительности, если, возможно, вы не сделаете это для огромного количества небольших таблиц).Для сравнения источников: https://www.lua.org/gems/sample.pdf
Так есть ли основания не определять функции-члены непосредственно во время определения самой таблицы?Или это просто тот факт, что какой-то синтаксический сахар (синтаксис function name()
и двоеточие) тогда недоступен?