基本概念:
1. 每个表都可以关联一个元表:
每个 Lua 表都可以关联一个元表,通过设置 setmetatable 函数。
local myTable = {}
local myMetatable = {}
setmetatable(myTable, myMetatable)
2. 元表的特殊方法:
元表中可以定义一些特殊方法,例如 __index、__newindex、__add、__sub 等,以改变表的默认行为。
示例:
1. 使用 __index 实现默认值:
local myTable = {}
local myMetatable = {__index = {default = 42}}
setmetatable(myTable, myMetatable)
print(myTable.default) -- 输出: 42,当访问不存在的键时,会使用默认值
2. 使用 __add 实现表的相加:
local table1 = {10, 20, 30}
local table2 = {40, 50, 60}
local metatable = {
__add = function(t1, t2)
local result = {}
for i = 1, #t1 do
result[i] = t1[i] + t2[i]
end
return result
end
}
setmetatable(table1, metatable)
setmetatable(table2, metatable)
local resultTable = table1 + table2
现在,resultTable 中的元素为 {50, 70, 90}。
3. 使用 __newindex 实现对表的写保护:
local myTable = {}
local myMetatable = {
__newindex = function(table, key, value)
error("Attempt to modify read-only table")
end
}
setmetatable(myTable, myMetatable)
myTable.name = "John" -- 尝试写入会触发错误
这些是关于 Lua 元表的基本概念和一些示例。元表为 Lua 提供了一种灵活的方式来定制表的行为,使得编程更加强大和可扩展。
转载请注明出处:http://www.zyzy.cn/article/detail/6498/Lua