lua-函数作为表元素
来源:互联网 发布:mac alt f4 编辑:程序博客网 时间:2024/06/11 10:02
(如有错误请联系我更正,以免误导他人!)
lua中函数作为表中元素时有三种定义方式与两种调用方式
定义方式:
①tab.func=function ( 参数)
-- body
end
-- body
end
②function tab.func( 参数)
-- body
end
-- body
end
③function tab:func( 参数)
-- body
end
-- body
end
其中,①②两种定义方式与非表元素的函数的定义一样。方式③采用‘:’来定义,实际上隐藏了一个形参的声明,这个形参会截获调用函数时的第一个实参并把它赋值给self。
调用方式:
①tab.func(参数)
②tab:func(参数)
其中,①调用方式与非表元素的函数的调用一样。方式②采用‘:’来调用函数,实际上隐式的把tab自己当作第一个实参传递,即tab:func(参数)相当于tab.func(tab,参数)。
下面我们来看几段代码:
tab={}function tab.func( a,b )print(a,b)endtab.func("第一个参数","第二个参数")
很明显,这段代码的输出为"第一个参数 第二个参数"。现在,我们保持函数定义方式不变,改变函数调用方式为:tab:func("a","b")。
输出结果变为:"table: 00837338 第一个参数",其中table: 00837338为tab的地址。这是因为,我们改为使用':'的方式调用函数时,隐式的把tab作为第一个实参传递给了函数,即a=tab,b="第一个参数",参数("第二个参数")则被抛弃了。
<span style="color:#000000;">tab={}function tab:func( a,b )print(a,b)endtab:func("第一个参数","第二个参数")</span>
这次,我们采用了第三种方式定义函数,采用第二种调用方式调用函数。输出结果为"第一个参数 第二个参数"。
现在,我们仍然保持函数定义方式不变,改变函数调用方式为:tab.func("a","b")。
输出结果变为:"第二个参数 nil"。这是因为,我们用第三种方式定义函数,则隐式地多出一个形参,假设这个形参的名字为hide。则定义函数时tab:func(a,b)就相当于tab.func(hide,a,b)。那么当我们使用'.'来调用函数时,我们只传入了两个参数,其中参数"第一个参数"传递给了hide,参数"第二个参数"传递给了a,最后,nil作为参数传递给了b。
同样的,在没改变函数调用方式之前,我们采用‘:’的方式定义和调用函数。故调用时隐式传递的参数传递给了定义时隐式定义的形参。
tab={str="我是字符串"}function tab:func()print(self.str)endtab:func()
使用':'的方式定义和调用函数,函数接受到tab自己并赋值给self(self相当于c++和java中的this)。故输出为"我是字符串"。
我们也可以改变函数定义为下面的方式达到一样的效果:
function tab.func(myself)print(myself.str)end
0 0
- lua-函数作为表元素
- lua返回一个Closures函数作为
- lua 将函数作为参数传递
- 数组元素可以作为函数的参数
- lua查找表元素方法
- lua中的handler和function()作为函数参数的不同
- MFC lua编程之lua函数作为MFC内部函数调用
- C语言数组元素地址作为函数参数
- C++数组:数组元素、存储引用以及作为函数参数
- C for ios --- 数组元素作为函数参数
- C++数组:数组元素、存储引用以及作为函数参数
- lua 引用lua表元素时需要写完整名称
- Lua随机选取表中元素&处理
- Lua查找表元素过程__index
- lua里面访问表中的所有元素
- 指针作为数组元素
- lua数字索引表函数
- Lua 作为配置文件(2)
- Android 手机开发板转化
- eclipse中创建gradle项目
- AngularJS之对话框
- 缓存近期最少使用算法
- 博客之路再起
- lua-函数作为表元素
- lua debug库的一些玩法
- 谈“测试驱动的开发”
- UVa 11889 Benefit (数学)
- HDU:回文数猜想
- 浙大PAT甲级 1104
- MSP430学习的第一个模拟I2C程序
- POJ 3261 Milk Patterns 后缀数组 二分答案
- STM32中断优先级彻底讲解