lua 元方法 __index

原方法 __index:

作用用于访问元表中的内容。即当通过键来访问table时,如果这个键没有值,则lua会寻找该table中的 metatable 中的__index键。如果__index指向的是一个able,则lua会在__index指向的table中查找相应的键

Lua 查找一个元表的规则:

1、在表中查找,如果找到,则返回该键指向的值。如果找不到则继续

2、判断该表是否存在元表,如果没有,则返回nil。 如果有元表则继续

3、判断元表中是否存在__index 方法,如果 __index不存在则返回nil。如果__index 方法是一个table,则重复1、2、3. 如果__index 方法是一个函数,则返回该函数的值

时间: 2024-08-02 11:02:56

lua 元方法 __index的相关文章

Lua中强大的元方法__index详解

今天要来介绍比较好玩的内容--__index元方法 1.我是备胎,记得回头看看 咳咳,相信每一位女生都拥有或者不知不觉中拥有了一些备胎,啊,当然,又或许是成为过别人的备胎. 没有备胎的人,就不是完整的人生.(小若:停!) 我们来想象一下,如果对一个table进行取值操作,但是table根本就没有这个值呢?比如: 复制代码代码如下: local t = {        name = "hehe",    }    print(t.money); 输出结果当然是:nil t只用于name

lua metatable和metamethod元表和元方法

Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表达式a+b.当Lua试图将两个table相加时,它会先检查两者之一是否有元表,然后检查该元表中是否存在__add字段,如果有,就调用该字段对应的值.这个值就是所谓的“元方法”,这个函数用于计算table的和.    Lua中每个值都有一个元表.table和userdata可以有各自独立的元表,而其它数据类型的值则共享其类型所属的单一元表.缺省情况

【quick-cocos2d-x】Lua 面向对象(OOP)编程与元表元方法

版权声明:本文为博主原创文章,转载请注明出处. 面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物. 早期的计算机编程是基于面向过程的方法,通过设计一个算法就可以解决当时的问题.随着计算机技术的不断提高,计算机被用于解决越来越复杂的问题.面向过程式的编程思想很难良好的解决这些复杂的问题,通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析.设计与编程.同时,面向对象能有效提高编程的效率,通过封装技术,消息机制可以像搭积木的一样快速开发出一个全新的系统.  但是

Lua __index元方法

[Lua __index元方法] 当你通过键来访问 table 的时候,如果这个键没有值,那么Lua就会寻找该table的metatable(假定有metatable)中的__index 键.如果__index包含一个表格,Lua会在表格中查找相应的键. 如果__index包含一个函数的话,Lua就会调用那个函数,table和键会作为参数传递给函数. __index 元方法查看表中元素是否存在,如果不存在,返回结果为 nil:如果存在则由 __index 返回结果. 参考:http://www.

__index元方法

如果定义了一个元表 table = {a = 1} setmetatable(table, {__index = {b = 2}}) 那么如果在table中取没有定义的键,那么lua就会在__index元方法里面去找,前提是__index是一个表,她还可以是一个函数 print(table.a,table.b) ------------ 那么当__index元方法是函数会怎么样呢?lua会调用这个函数,并传入表和你写的那个键 t = setmetatable({a=1},{__index = f

Lua 学习笔记(十一)元表与元方法

在Lua中的每个值都有一套预定义的操作集合.例如可以将数字相加,可以连接字符串,还可以在table中插入一对key-value等.但是我们无法将两个table相加,无法对函数作比较,也无法调用一个字符串. 但是,Lua提供了元表与元方法来修改一个值的行为,使其在面对一个非预定义的操作时执行一个指定的操作.例如,假设a和b都是table,通过元表可以定义如何计算表达式a+b.当Lua试图将两个table相加时,它会先检查两者之一是否有元表,然后检查该元表中是否有一个叫__add的字段.如果找到了该

lua编程之元表与元方法

一. 前言 lua是一种非常轻量的动态类型语言,在1993年由由Roberto Ierusalimschy.Waldemar Celes 和 Luiz Henrique de Figueiredo等人发明,lua的设计目标是轻便地嵌入宿主语言,增强系统的可扩展性和可定制性.lua的源码只有两万余行,非常精简小巧,在目前的脚本引擎中,lua的速度是最快的,这也是lua进入程序设计语言前20名,如今已经广泛应用于游戏行业,这几篇文章将会讨论下lua的几个比较重要的特性. 一门语言的类型系统是其最根本

Lua中的元表与元方法

前言 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了“+”符号,就可以进行类的加法运算.在Lua中也有这个道理,两个table类型的变量,你是无法直接进行“+”操作的,如果你定义了一个指定的函数,就可以进行了.那这篇博文就是主要讲的如何定义这个指定的函数,这个指定的函数是什么?希望对学习Lua的朋友有帮助. Lua是怎么做的? 通常,Lua中的每个值都有一套预定义的操作集合,比如数字是可以相加的,字符串是可以连

lua——元表、元方法、继承

[元表] 元表中的键为事件(event),称值为元方法(metamethod). 通过函数getmetatable查询任何值的元表,通过函数setmetatable替换表的元表. setmetatable(只能用于table)和getmetatable(用于任何对象) 语法:setmetatable (table, metatable),对指定table设置metatable      [如果元表(metatable)中存在__metatable键值,setmetatable会失败] 语法:tm