这是需要仔细分辨的几个概念.

元表:相当于table的隐藏属性.

  • 只有固定的一些方法,如__index,__tostring,__add等,称为元方法.
  • 虽然是固定的,但是任何table都可以作为任何值的元表,实际只会赋值对应的值.

self:

  • 相当于调用方.定义的时候和调用的时候都用冒号,语法糖.

__index:

  • 相当于隐藏属性,相比于元表,元表是固定的隐藏属性,而__index是自己定义的任意属性.
  • 和__newindex都会有循环调用(即死循环),报错loop in settable.

__add(a, b) --加法 
__sub(a, b) --减法 
__mul(a, b) --乘法 
__div(a, b) --除法 
__mod(a, b) --取模 
__pow(a, b) --乘幂 
__unm(a) --相反数 
__concat(a, b) --连接 
__len(a) --长度 
__eq(a, b) --相等 
__lt(a, b) --小于 
__le(a, b) --小于等于 
__index(a, b) --索引查询,使用rawget(k,v)进行原始的访问. 
__newindex(a, b, c) --索引更新,赋值隐藏属性,rawset(t,k,v)进行原始赋值. 
__call(a, ...) --执行方法调用 
__tostring(a) --字符串输出 
__metatable --保护元表

关于元表,self,元方法__index的更多相关文章

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

    在Lua中的每个值都有一套预定义的操作集合.例如可以将数字相加,可以连接字符串,还可以在table中插入一对key-value等.但是我们无法将两个table相加,无法对函数作比较,也无法调用一个字符 ...

  2. lua元表与元方法

    lua中提供的元表(metatable)与元方法(metamethod)是一种非常重要的语法,metatable主要用于做一些类似于C++重载操作符式的功能. lua中提供的元表是用于帮助lua变量完 ...

  3. lua元表和元方法 《lua程序设计》 13章 读书笔记

    lua中每个值都有一个元表,talble和userdata可以有各自独立的元表,而其它类型的值则共享其类型所属的单一元表.lua在创建table时不会创建元表. t = {} print(getmet ...

  4. lua metatable和metamethod元表和元方法

    Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表达式a+b.当Lua试图将两个table相加时, ...

  5. lua中 table 元表中元方法的重构实现

    转载请标明出处http://www.cnblogs.com/zblade/ lua作为游戏的热更新首选的脚本,其优势不再过多的赘述.今天,我主要写一下如何重写lua中的元方法,通过自己的重写来实现对l ...

  6. 【游戏开发】小白学Lua——从Lua查找表元素的过程看元表、元方法

    引言 在上篇博客中,我们简单地学习了一下Lua的基本语法.其实在Lua中有一个还有一个叫元表的概念,不得不着重地探讨一下.元表在实际地开发中,也是会被极大程度地所使用到.本篇博客,就让我们从Lua查找 ...

  7. lua编程之元表与元方法

    一. 前言 lua是一种非常轻量的动态类型语言,在1993年由由Roberto Ierusalimschy.Waldemar Celes 和 Luiz Henrique de Figueiredo等人 ...

  8. Lua中的元表与元方法学习总结

    前言 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了"+"符号,就可以进行类的加法运算.在Lu ...

  9. Step By Step(Lua元表与元方法)

    Step By Step(Lua元表与元方法) Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表 ...

随机推荐

  1. [转]C#调用Excel VBA宏

    [转载自]http://www.shangxueba.com/jingyan/95031.html 附上一段原创常用代码 计算列标题字符串 Function CalcColumn(ByVal c As ...

  2. [UE4]C++代码操作SplineMesh

    转自:http://aigo.iteye.com/blog/2279503 void ARaceSpline::OnConstruction(const FTransform& Transfo ...

  3. SQL Server 2012 OFFSET/FETCH NEXT分页示例

    原文:http://beyondrelational.com/modules/29/presentations/483/scripts/12983/sql-server-2012-server-sid ...

  4. 跳表(skiplist)Python实现

    # coding=utf-8 # 跳表的Python实现 import random # 最高层数设置为4 MAX_LEVEL = 4 def randomLevel(): ""& ...

  5. Python之模块(二)

    1.subprocess模块 2.loggin模块 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日 ...

  6. sbt的安装测试

    1.下载 wget https://github.com/sbt/sbt/releases/download/v0.13.15/sbt-0.13.15.tgz 2.安装 tar -zxvf sbt-0 ...

  7. MOCK 基本使用例子

    package com.icil.esolution.orders; import static org.springframework.test.web.servlet.request.MockMv ...

  8. Git常用命令速记与入门

    . 首页 博客园 联系我 前言:Git是什么. 常规初始化操作. 三种状态. 分支. add(添加)操作. 查看差异. Commit(提交)操作. Push(推送)与Pull(更新)操作. 移除文件. ...

  9. Eclipse创建Maven-Web项目及解决 jre版本和web.xml版本问题

    eclipse maven-web有个蛋疼的问题,就是web版本很低. 且看别人是如何解决的:Eclipse创建Maven-Web项目及解决 jre版本和web.xml版本问题

  10. FMX ScrollBox 拖拽控制

    Firemonkey下的ScrollBox 拖拽控制,滚动控制,拖拽,滚动条 AniCalculations 仅允许纵向拖拽,拖拽 scrlbx.AniCalculations.TouchTracki ...