我试图在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)
中做了什么。我可以把它改成任何东西,它不会以任何方式影响程序。
谢谢!
; ^) Zalokin
答案 0 :(得分:0)
向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
。