local heroInfo = {}

--直接打印 table的名字,就会输出该table的内存地址
print("表地址---------------",heroInfo) --注意区别PrintInfo,PrintInfo2与TestSelf两个函数中self的不同
--有什么不? heroInfo.PrintInfo = function(self, x)--这里的self仅是我们定义的普通参数,可以写成任何样子
print("PrintInfo-------------x=", x) self.gender = "men"
print("gender=", heroInfo.gender) --输出 gender=men,为什么?
end --定义函数时使用点号,self并不存在
heroInfo.PrintInfo2 = function(x)
print("PrintInfo2-------------self=", self, ",x=", x)
end --定义函数时使用冒号,系统自动把表地址赋值给了self
function heroInfo:TestSelf(x)--注意,参数并没有写self
print("TestSelf--------------self=", self, ",x=", x)
self.name = "jim"
print("heroInfo.name=",heroInfo.name)
heroInfo.name = "none"
print("self.name=", self.name)
end --函数调用
--使用冒号调用时,系统会自动把表地址传给函数的第一个参数,使用点号则不会
--这个参数可以写成self,也可以写成其它任何样子
--这类似于C++中的this指针
heroInfo:PrintInfo("hello")--改成点号调用测试下
heroInfo:PrintInfo2("hello", "world")--改成点号调用测试下
heroInfo:TestSelf()--改成点号调用测试下 --lua中table是一个引用型变量,就像C#中的数组,类对象
local self = heroInfo --从此以后ref与heroInfo就指向同一个表了 print("self.name=",self.name, "self.gender=",self.gender)
self.name = "monster"
self.gender = "unknown"
print("heroInfo.name=", heroInfo.name, "heroInfo.gender=", heroInfo.gender)

LUA表与函数的深入理解的更多相关文章

  1. Lua学习(4)——函数

    在Lua中函数的调用方式和C语言基本相同,如:print("Hello World")和a = add(x, y).唯一的差别是,如果函数只有一个参数,并且该参数的类型为字符串常量 ...

  2. lua实现私有函数

    本文是原创文章,如需转载,请注明文章出处 要用lua实现私有函数,关键就是使用metatable的特性来实现. Test.lua: local v = {};v.x = 100;v.y = 200; ...

  3. lua二进制操作函数

    由于 Lua 脚本语言本身不支持对数字的二进制操作(例如 与,或,非 等操作),MUSHclient 为此提供了一套专门用于二进制操作的函数,它们都定义在一个“bit”表中,使用时只要requre “ ...

  4. LUA表克隆方法归纳

    lua表克隆 将lua一个表, 克隆出一份为一个独立的另外一个表. 对于一个module, 如果在require之后,获得的表对象, 不能直接修改, 例如lua缓存此表, 但是多次逻辑执行, 都使用的 ...

  5. 三种语言(c++、as、lua)中函数的差异性

    对于不同的语言, 尤其是静态语言和动态语言, 对于函数的定义(即如何看待一个函数)和处理截然不同.具体来说可以分为两类: 1.将函数视为第一类型值, 即函数和其他的对象一样, 都是语言中一个普通的对象 ...

  6. lua操作常用函数学习一

    (1)lua 和 C++之间的交互的基本知识: lua 和 C++ 之间的数据交互通过堆栈进行,栈中的数据通过索引值进行定位,(栈就像是一个容器一样,放进去的东西都要有标号)其中栈顶是-1,栈底是1, ...

  7. ORACLE时间函数(SYSDATE)深入理解

    ORACLE时间函数(SYSDATE)深入理解 加法 select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add ...

  8. Lua中的函数

    [前言] Lua中的函数和C++中的函数的含义是一致的,Lua中的函数格式如下: function MyFunc(param) -- Do something end 在调用函数时,也需要将对应的参数 ...

  9. 手游开发之lua的class函数详解

    众所周知,lua没有类这个概念但其通过table实现了面向对象的“类”.在cocos2dx引擎下提供了class(className, ...)函数方法名,因为在脚本开发中这个接口基本都会用来创建一个 ...

随机推荐

  1. laravel框架中使用Validator::make()方法报错

    在控制器中用到了Validator::make(),它默认是use Dotenv\Validator; 但这样会出现 FatalErrorException错误 call to undefined m ...

  2. MsWord 操作总结

    转自(http://www.cnblogs.com/eye-like/p/4121219.html) Msdn上的word操作api(不过只有英文版,英文差的先闪过) Word2007的API:htt ...

  3. poj3814

    题解: 所以poj只放了一组数据? 打表(花费了我无数心血找的的打标) 代码: #include <stdio.h> int main(){ printf("1\n2\n1\n2 ...

  4. windows下查看端口是否被占,以及端口被哪个程序占用

    如何查看端口被是否被占用 在 “ 命令提示符 ” 中输入 “netstat -an”, 即可显示本机所有开放端口.下表是具体的说明. 数据列 说明 propo 指连接使用的协议名称 local add ...

  5. WebGL编程指南案例解析之绘制三角形

    //案例3.绘制三角形,将顶点数据存到缓冲区对象(gl.ARRAY_BUFFER)中,然后顶点着色器从里面读数据(3个顶点) //顶点着色器中去掉gl_PointSize = 10.0,绘制三角不能设 ...

  6. MySQL 存储过程理解

    /********************************************************************************* * MySQL 存储过程理解 * ...

  7. 在C#中调用Java生成的jar包文件的方法

    C#工程调用Java已生成的jar包步骤如下: 一.使用IKVM.NET组件 首先到IKVM官网(http://www.ikvm.net)下载组件,下载地址:https://sourceforge.n ...

  8. VsCode中运行nodeJs代码的简单方法

    VsCode安装包默认内置的node debug插件需要配置工程调试运行文件才能正常运行,对于想要运行一个简单的js文件或者就是一段js代码时比较麻烦,为此可以安装Code Runner插件 安装完后 ...

  9. [转]JavaScript RegExp 对象参考手册

    JavaScript RegExp 对象参考手册 RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 直接量语法 /pattern/attributes 创建 ...

  10. 移动自动化测试:Android Studio 、Appium、夜神模拟器

    环境是Window 10 64位 第一章:安装Appium Appium和node.js需要一起安装,他们的依赖关系暂不深究. 1. node.js傻瓜式安装 官网地址:https://nodejs. ...