lua metatables - __index函数中的第一个参数

时间:2017-10-27 14:58:08

标签: lua metatable

我试图在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

我的问题是 - 变量tabmy_metatable.__index = function (tab, key)中做了什么。我可以把它改成任何东西,它不会以任何方式影响程序。

谢谢!

; ^) Zalokin

1 个答案:

答案 0 :(得分:0)

tab参数传递表本身的参数。

例如,给定您的代码my_tab["world"],将分别向参数tabkey传递参数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