setmetatable(table,metatable):对指定 table 设置元表(metatable),如果元表(metatable)中存在 __metatable 键值,setmetatable 会失败。 getmetatable(table):返回对象的元表(metatable)。 以下实例演示了如何对指定的表设置元表: mytable={}-- 普通表
因此Lua 提供了元表(Metatable),允许我们改变table的行为,每个行为关联了对应的元方法。 setmetatable(table,metatable): 对指定table设置元表(metatable),如果元表(metatable)中存在__metatable键值,setmetatable会失败 。 getmetatable(table): 返回对象的元表(metatable)。 setmetatable和getmetatable mytable = {} ...
setmetatable(o,self) self.__index=function(table, key) ifself[key] ==nilthen error("获取值时,不存在此字段: ".. key) else returnself[key] end end self.__newindex=function(table, key, value) ifself[key] ==nilthen error("设置值时,不存在此字段: ".. key) else ifvalue ==nilthen ...
mytable =setmetatable({key1 ="value1"}, {__newindex= mymetatable })print(mytable.key1)--调用newkey的时候,发现mytable表中没有newkey ,所以会调用元方法,而不进行赋值--如果对已存在的索引键(newkey),则会进行赋值,而不调用元方法 __newindexmytable.newkey ="新值2"print(mytable.newkey,mymet...
setmetatable(t, mt) end 1. 2. 3. 4. 5. 6. 7. 如果默认值没有 weak 的 keys,它就会将所有的带有默认值的 tables 设定为永久存在。在第二种方法中,我们使用不同的 metatables 来保存不同的默认值,但当我们重复使用一个默认值的时候,重用同一个相同的 metatable。这是一个典型的记忆技术的应用: ...
end}--将元表应用到普通表上setmetatable(myTable,metaTable)--现在当我们尝试为myTable中不存在的键赋值时 myTable.x=10--我们会看到输出:Setting x to10--已经存在的键仍然可以直接赋值 myTable.x=20--这里不会触发__newindex因为键已经存在 在这个例子中,当你尝试为设置一个新的键时,元方法会被调用,并...
Lua是一种轻量级的脚本语言,它支持面向对象编程的一种机制叫做元表(Metatable)。元表可以为表(Table)设置一组特殊的操作,例如重载运算符、定义表的行为等。当我们在一个表中调用一个方法时,Lua会首先在表中查找该方法,如果找不到,则会继续在元表中查找。
-- call_test.lua脚本文件-- 创建一个简单的表localgreet={}-- 定义元表,并添加__call元方法localmt={__call=function(tbl,name)-- 当表被调用时返回问候语return"Hello, "..tostring(name).."!"end}-- 将元表应用到greet表上setmetatable(greet,mt)-- 现在可以像调用函数一样调用greet表print(greet...
1.getmetatable函数 2.setmetatable函数 二、元方法 1.数学运算操作符元方法 2.位操作符元方法 3.比较操作符元方法 4.字符串操作元方法 5.表操作元方法 6.函数调用元方法 7.垃圾回收元方法 一、元表 Lua 中的每个值都可以有一个元表。 这个元表就是一个普通的 Lua 表, 它用于定义原始值在特定操作下的...