在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1:lua 元表(Metatable) 如何对指定的表设置元表: (2)mytable = setmetatable({},{}) 2:元方法 __index 当你通过键来访问 table 的时候,如果这个键没有值,那么Lua就会寻找该table的metatable(假定有metatable)中的__index 键。如果__index包含一个表格,Lua会在表格中查找相应的键。 other = {foo=3} 如果__index包含一个函数的话,Lua就会调用那个函数,table和键会作为参数传递给函数。__index 元方法查看表中元素是否存在,如果不存在,返回结果为 nil;如果存在则由 __index 返回结果。 metatable = setmetatable({key1= "value1"},{ 相等于 mytable = setmetatable({key1= "value1"},{__index= {key2= "metatablevalue"}}) print(metatable.key1,mytable.key2) => value1,metatablevalue Lua 查找一个表元素时的规则,其实就是如下 3 个步骤: 3:__newindex元方法 _newindex 元方法用来对表更新,__index则用来对表访问。当你给表的一个缺少的索引赋值,解释器就会查找__newindex 元方法:如果存在则调用这个函数而不进行赋值操作。 以下实例演示了 __newindex 元方法的应用: mytable.newKey = "新值2" print(mytable.newKey,mymetatable.newKey) =>nil,新值2 以上实例中表设置了元方法 __newindex,在对新索引键(newkey)赋值时(mytable.newkey = "新值2"),会调用元方法,而不进行赋值。而如果对已存在的索引键(key1),则会进行赋值,而不调用元方法 __newindex。 以下实例使用了 rawset 函数来更新表: mytable.key1 = "new value" rawset 对于有__newindex元方法,调用rawset(t, k, v)函数可以不涉及任何元方法而直接设置table 中与key 相关联的value rawget是为了绕过__index而出现的,就是让__index方法无效 4:为表添加操作符 5:__call 元方法 6:__tostring https://www.runoob.com/lua/lua-metatables.html 菜鸟教程链接
|
请发表评论