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 ...
setmetatable(table,metatable): 对指定table设置元表(metatable),如果元表(metatable)中存在__metatable键值,setmetatable会失败 。 getmetatable(table): 返回对象的元表(metatable)。 setmetatable和getmetatable mytable = {} -- 普通表 mymetatable = {} -- 元表 setmetatable(mytable,mymetatable) -- 把 m...
大家可以参考lua手册,metatable是被译作元表,Lua 中的每个值都可以用一个 metatable。这个 metatable 就是一个原始的 Lua table ,它用来定义原始值在特定操作下的行为。 一个metatable 可以控制一个对象做数学运算操作、比较操作、连接操作、取长度操作、取下标操作时的行为,metatable 中还可以定义一个函数,让 userda...
如果默认值没有 weak 的 keys,它就会将所有的带有默认值的 tables 设定为永久存在。在第二种方法中,我们使用不同的 metatables 来保存不同的默认值,但当我们重复使用一个默认值的时候,重用同一个相同的 metatable。这是一个典型的记忆技术的应用: local metas = {} setmetatable(metas, {__mode = \"v\"...
问Lua -理解setmetatableENsetmetatable(train_set,{__index=function(t,i)return{t.data[i],t....
Lua 中每个 value 都可以有一个 metatable(在 Lua 5.0 只有 table 和 userdata 能够存在 metatable)。每个 table 和 userdata value 都有一个属于自己的 metatable,而其他每种类型的所有 value 共享一个属于本类型的 metatable。在 Lua 代码中,通过调用 setmetatable 来设置且只能设置 table 的 me...
Lua wiki中的metatable events。 接下来是答案: 在元表中,__index方法的第一个参数t指的是拥有元表的表,也就是train_set。通过这个参数,可以在多个表之间重用同一个元表。 __index是元表中的一种特殊函数(详见metatable events),当元表中的一个字段被访问但不存在时会被调用。例如,如果train_set中不包含键...
Lua中每个值都可具有元表。 元表是普通的Lua表,定义了原始值在某些特定操作下的行为。你可通过在值...
这是我目前拥有的 UIElement 包装器类:UIElement = {};UIElement.__index = UIElement;setmetatable...
Lua代码: locala = create_table_with_object()print(getmetatable(a.obj).__name) 输出为“OtherType”,但应为“Obj”。似乎第二次调用lua_setmetatable()覆盖了来自其他值的表?! Ok, 解决了! 在 Lua 中,lightuserdata 共享一个元表(而不是每个值都有一个元表)。因此,更改一个 lightuserdata 值的表会...