因此Lua 提供了元表(Metatable),允许我们改变table的行为,每个行为关联了对应的元方法。 setmetatable(table,metatable): 对指定table设置元表(metatable),如果元表(metatable)中存在__metatable键值,setmetatable会失败 。 getmetatable(table): 返回对象的元表(metat
>t=setmetatable({},{__index=other}) >t.foo 3 >t.bar nil 如果__index包含一个函数的话,Lua就会调用那个函数,table和键会作为参数传递给函数。 __index 元方法查看表中元素是否存在,如果不存在,返回结果为 nil;如果存在则由 __index 返回结果。
setmetatable(table,metatable): 对指定 table 设置元表(metatable),如果元表(metatable)中存在 __metatable 键值,setmetatable 会失败; getmetatable(table): 返回对象的元表(metatable)。 设置元表 mytable = {} -- 普通表 mymetatable = {} -- 元表 setmetatable(mytable,mymetatable) -- 把mymetatable设...
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 ...
-- call_test.lua脚本文件-- 创建一个简单的表localgreet={}-- 定义元表,并添加__call元方法localmt={__call=function(tbl,name)-- 当表被调用时返回问候语return"Hello, "..tostring(name).."!"end}-- 将元表应用到greet表上setmetatable(greet,mt)-- 现在可以像调用函数一样调用greet表print(greet...
setmetatable(table,metatable): 对指定table设置元表(metatable),如果元表(metatable)中存在__metatable键值,setmetatable会失败 。 getmetatable(table): 返回对象的元表(metatable)。 以下实例演示了如何对指定的表设置元表: __index参考示例 locala1 = {20,1, key1 ="hello_a1", key2 ="world_a1", lang...
end}--将元表应用到普通表上setmetatable(myTable,metaTable)--现在当我们尝试为myTable中不存在的键赋值时 myTable.x=10--我们会看到输出:Setting x to10--已经存在的键仍然可以直接赋值 myTable.x=20--这里不会触发__newindex因为键已经存在 在这个例子中,当你尝试为设置一个新的键时,元方法会被调用,并...
setmetatable(table, metatable):此函数用于为一个表设置元表。第一个参数是要设置元表的目标表,第二个参数就是元表本身。它允许开发者定义一个表的行为方式,通过在元表中定义元方法来实现。 getmetatable(table):用于获取指定表的元表。如果表有元表,这个函数返回这个元表; 否则,返回nil。
Lua是一种轻量级的脚本语言,它支持面向对象编程的一种机制叫做元表(Metatable)。元表可以为表(Table)设置一组特殊的操作,例如重载运算符、定义表的行为等。当我们在一个表中调用一个方法时,Lua会首先在表中查找该方法,如果找不到,则会继续在元表中查找。
1.getmetatable函数 getmetatable函数 来获取任何值的元表。 2.setmetatable函数 setmetatable来替换一张表的元表。在 Lua 中,不可以改变表以外其它类型的值的元表那些只能在 C 里做。 二、元方法 在ltm.h的TMS枚举中定义了元方法的枚举类型,在global_state中有一个tmname字段,为TMS到元方法名字的映射,在下面...