<6>Lua元表和冒号 self
Lua中没有像C、C++、JAVA中的类概念,面向对象等 ,但我们可以模拟出来
1. Lua中有个很重要的概念元表
设置元表setmetatable()函数 获取元表getmetatable()函数
例子如下:
元表中有个很重要的Key __index
代码:
local Person = {
__index = {
name = "jadeshu",
age = 28,
sex = 0,
}
} --表
local man = {} --表
setmetatable(man,Person) --设置元表
--man的元表是Person
--测试
print(man.name) --显示 jadeshu
---即如果在表里面找不到的key,Lua解释器在元表里面的__index表里进行查找;
2. 冒号和self
冒号 (:) 多了个self机制,增加了实例传递,如下
代码如下
local Person = {}
function Person:getName()
print("call Person:getName()",self)
end
--当调用函数时,会传递self
--self指的是Person这个实例表
Person:getName() --call Person:getName() table:006D76B8
--注意区别.
function Person.getAge()
print("call Person:getAge()",self)
end
Person.getAge() --call Person:getAge() nil
--冒号相当于点号如下操作
function Person.getSex(person)
print("call Person:getSex()",person)
end
Person.getSex(Person) --call Person:getSex() table:006D76B8
<6>Lua元表和冒号 self的更多相关文章
- [转]LUA元表
lua元表和元方法 <lua程序设计> 13章 读书笔记 lua中每个值都有一个元表,talble和userdata可以有各自独立的元表,而其它类型的值则共享其类型所属的单一元表.lua在 ...
- 学习Lua setmetatable Lua 元表
Lua 元表(Metatable) 在 Lua table 中我们可以访问对应的key来得到value值,但是却无法对两个 table 进行操作. 个人理解,这个相当于其他语言的继承,是把这个类的方法 ...
- Step By Step(Lua元表与元方法)
Step By Step(Lua元表与元方法) Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表 ...
- lua元表
__index元方法:按照之前的说法,如果A的元表是B,那么如果访问了一个A中不存在的成员,就会访问查找B中有没有这个成员.这个过程大体是这样,但却不完全是这样,实际上,即使将A的元表设置为B,而且B ...
- lua元表与元方法
lua中提供的元表(metatable)与元方法(metamethod)是一种非常重要的语法,metatable主要用于做一些类似于C++重载操作符式的功能. lua中提供的元表是用于帮助lua变量完 ...
- lua元表和元方法 《lua程序设计》 13章 读书笔记
lua中每个值都有一个元表,talble和userdata可以有各自独立的元表,而其它类型的值则共享其类型所属的单一元表.lua在创建table时不会创建元表. t = {} print(getmet ...
- lua元表学习
a = {, } b= {, } vector2 = {} function vector2.Add(v1, v2) if(v1 == nil or v2 == nil)then return nil ...
- [转]lua元表代码分析
http://lin-style.iteye.com/blog/1012138 版本整理日期:2011/4/21 元表其实就是可以让你HOOK掉一些操作的一张表. 表的定义在ltm.h/c的文件里.对 ...
- lua元表详解
元表的作用 元表是用来定义对table或userdata操作方式的表 举个例子 local t1 = {1} local t2 = {2} local t3 = t1 + t2 我们直接对两个tabl ...
随机推荐
- ADO多线程数据库总结
ADO多线程数据库查询通常会出现以下问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...
- elastic客户端TransportClient的使用
关于TransportClient,elastic计划在Elasticsearch 7.0中弃用TransportClient,并在8.0中完全删除它.后面,应该使用Java高级REST客户端,它执行 ...
- Python开发【笔记】:列表转字典
列表转字典 it = [1,2,3,4] print(dict(zip(it, it))) # {1: 1, 2: 2, 3: 3, 4: 4} it = iter(it) print(dict(zi ...
- AT2567 RGB Sequence dp
正解:计数dp 解题报告: 传送门! umm其实我jio得dp的题目的话就难在思想昂,,,知道状态知道转移就不难辣QAQ 所以就不说别的了直接写下思路放下代码就over辣QAQ 最基础的思想就是f[i ...
- C# Asp.net使用FormData对象实现ajax提交表单及上传图片
1.html代码: <form id="postForm"> 文件名:<input type="text" name="filena ...
- Examples of GoF Design Patterns in Java's core libraries
设计模式分类 stackOverflow Structural(结构模式) Adapter:把一个接口或是类变成另外一种. java.util.Arrays#asList() javax.swing. ...
- C#-1-2-C#基础
1-注释符 1).单行注释符:// 2).多行注释符:/**/ 3).文档注释符:// 2-常用快捷键 3-变量类型 4-转义字符 5-语句 1.将相应内容打印到控制台:Console.WriteLi ...
- 用canvas画三角形的方法
<canvas id="favoriteRectangle" width="30" height="30"></canva ...
- Linux dmidecode 命令
当我们需要获取机器硬件信息时,可使用linux系统自带的dmidecode工具进行查询. dmidecode 用于获取服务器的硬件信息,通常是在不打开计算机机箱的情况下使用该命令来查找硬件详细信息 这 ...
- pycharm 如何设置函数调用字体颜色
一.pycharm 如何设置函数调用字体颜色 1.打开pycharm编辑器,file > settings > editor > color scheme > python & ...