继续上面的代码,我们稍微修改下,从中能更好的理解lua的__newindex和__index。 localmt={x="mt",y=6}localw={x="w"}w=setmetatable(w,mt)mt.__newindex=mtmt.__index=mtprint("w.x:"..w.x);print("mt.x:"..mt.x);print(">>> w.x =\"newW\"");w.x="newW";print("w.x:"..w....
我们都知道,元表中的__index和__newindex是在table中没有所需要访问的index时才发挥作用的,因此,只有将一个table保持为空,然后设置__index和__newindex元方法,才有可能记录下来所有对它的访问。 为了监视一个table的所有访问,就应该为真正的table创建一个代理。这个代理就是一个空的table,其中__index和__newindex...
`__index` 元方法常见有两种形式:形式一:`__index` 为表。当 `__index` 是一个表时,Lua会在这个表中查找不存在的键。这在实现继承或者设置默认值方面很实用。示例如下:首先创建一个基类:BaseClass = { value = 10.} 接着创建一个子类,让子类继承自 `BaseClass`:SubClass = {}.然后为子类设置元...
作用用于访问元表中的内容。即当通过键来访问table时,如果这个键没有值,则lua会寻找该table中的 metatable 中的__index键。如果__index指向的是一个able,则lua会在__index指向的table中查找相应的键 Lua 查找一个元表的规则: 1、在表中查找,如果找到,则返回该键指向的值。如果找不到则继续 2、判断该表是否...
在Lua中,元方法__index和__newindex可以用来重载表的访问操作。具体作用如下:1. __index元方法:当访问一个表中不存在的键时,如果该表定义了元方法__index,Lua会调...
__index、__newindex的用法说明见菜鸟教程 tbA = { name = "a", age = 8 } tbA.__index = tbA tbB = {} tbB = setmetatable(tbB, tbA) function tbB:SetName(name) self.name = name end function tbB:Show() print(self.name) self:SetName("b") print(self.name) self:SetName(nil) prin...
在谈及Lua中的__index,__newindex,rawget和rawset前,需要理解Lua中的元表这个概念。 零、元表的概念 对Lua中元表的解释: 元表可以改变表的行为模式。 这里举个例子: Window ={} Window.prototype= {x =0,y =0,width =100,height =100,} Window.mt={}functionWindow.new(o)setmetatable(o ,Window.mt...
[LUA-print] nil 当调用了不存在的money字段时,就会调用table元表里的_index元方法,并且会传递table和字段名两个参数。于是,我们就可以在这个函数里做很多自定义的操作了。 1. 继承的实现方法 虽然现在还没到讲解继承的时候,不过,我们可以先来稍微品尝一下。当调用table中不存在的字段时,会调用table元表的__ind...
lua _index __index元方法(索引查询): 默认情况下,当我们访问一个table中不存在的字段时,得到的结果时nil,但是这种状况很容易被改变,lua是按照以下步骤决定是返回nil还是其他值的: 1.当访问一个table的字段时,如果table有这个字段,则直接访问对应的值
Lua __index方法未在读取时执行 您似乎犯了一个非常常见的错误,__index仅在使用的键在索引表中没有值时才被调用。 您需要在setmetatable调用中使用空白表,并在元函数中引用实际表。您经常在“受保护”或“只读”表中看到这种情况。 local scalar = 2local protected = {width = 2, height = 1, x = 10...