lua metatables - первый параметр в функции __index
Я пытаюсь изучить метатаблицы в Lua, и я наткнулся на следующий пример:
local my_metatable = {}
local my_tab = {}
setmetatable(my_tab, my_metatable)
-- Set the __index metamethod:
my_metatable.__index = function (tab, key)
print("Hello, " .. key)
return "cruel world"
end
-- Trigger the __index metamethod:
print("Goodbye, " .. my_tab["world"])
Результат:
Hello, world
Goodbye, cruel world
Мой вопрос - что означает переменная tab
делать, в my_metatable.__index = function (tab, key)
, Я могу изменить его на что угодно, и это никак не повлияет на программу.
Спасибо!
; ^) Залокин
1 ответ
tab
Параметру передается аргумент самой таблицы.
Например, учитывая ваш код my_tab["world"]
параметры tab
а также key
будут переданы аргументы my_tab
а также "world"
соответственно. Потому что вы не использовали таблицу в вашем __index
функция, это не повлияло ни на что.
Вот базовый пример того, для чего он может быть использован. Давайте рассмотрим специальную таблицу Array, которая действует как массив, но имеет некоторую дополнительную информацию:
Array = {
length = 0,
array = {}
}
mt = {
__index = function(tab, index)
return tab.array[index]
end
}
setmetatable(t, mt)
--now when Array[3] is written, what will actually be returned is Array.array[3]
print(Array[3]) --will actually print Array.array[3]
На самом деле это не лучший способ реализовать эту функциональность, но, надеюсь, это даст вам представление о том, почему tab
параметр существует и что __index
может быть использован для в результате.