Они написаны по-разному, потому что они делают разные вещи.
t1 = {}
t2 = {a = 20}
meta = {__index = t2}
setmetatable(t1, meta)
print(t1.a) -- prints 20
Обратите внимание, что здесь есть 3 таблицы: meta
, метатабельная, t2
, в которой хранятся ключи a
и t1
который мы хотим установить для поиска отсутствующих ключей в t2
.
Метатабельная функция предназначена только для управления поведением t1
, но, чтобы использовать меньше таблиц, люди часто используют резервную таблицу(t2
) как метатабельный (meta
), так что он становится чем-то вроде
t1 = {}
t2_and_meta = {a = 20}
t2_and_meta.__index = t2_and_meta
setmetatable(t1, t2_and_meta)
print(t1.a) -- prints 20