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 может быть использован для в результате.

Другие вопросы по тегам