unity面试——Lua 元表 ,mytable.key2) => value1,metatablevalueLua查找一个表元素时的规则,其实就是如下3个步骤:1.在表中查找,如果找到,返回该元素,找不到则继续2....__index包含一个函数的话,Lua就会调用那个函数,table和键会作为参数传递给函数。__index元方法查看表中元素是否存在,如果不
Lua之__index与__newindex 1.__index(补充) 这是metatable中常用的键,它可以是表或者函数。 当我们查找主表中不存在(若存在则返回主表成员)的成员时,会调用元表的__index索引。若没有指定,即使元表中存在要查找的成员,也会返回nil;若指定一个表,则会在指定的表中查找。 如果给__index指定一个函数,则...
作用用于访问元表中的内容。即当通过键来访问table时,如果这个键没有值,则lua会寻找该table中的 metatable 中的__index键。如果__index指向的是一个able,则lua会在__index指向的table中查找相应的键 Lua 查找一个元表的规则: 1、在表中查找,如果找到,则返回该键指向的值。如果找不到则继续 2、判断该表是否...
`__index` 元方法常见有两种形式:形式一:`__index` 为表。当 `__index` 是一个表时,Lua会在这个表中查找不存在的键。这在实现继承或者设置默认值方面很实用。示例如下:首先创建一个基类:BaseClass = { value = 10.} 接着创建一个子类,让子类继承自 `BaseClass`:SubClass = {}.然后为子类设置元...
__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可以用来重载表的访问操作。具体作用如下:1. __index元方法:当访问一个表中不存在的键时,如果该表定义了元方法__index,Lua会调...
lua __index 前言 这篇博文将通过几个简单的实例演示,巩固对__index和__newindex的理解,同时加深对Lua中元表和元方法的理解,如果对Lua的元表和元方法还不是很熟悉的话,请参考这篇文章:《Lua中的元表与元方法》。 具有默认值的table 我们都知道,table中的任何字段的默认值都是nil,但是通过元表,我们可以很...
在谈及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...
__index metamethod不需要非是一个函数,他也可以是一个表。但它是一个函数的时候,Lua将table和缺少的域作为参数调用这个函数;当他是一个表的时候,Lua将在这个表中看是否有缺少的域。所以,上面的那个例子可以使用第二种方式简单的改写为: Window.mt.__index = Window.prototype...