lua 中调用函数的坑点
2016-06-24 20:07
260 查看
今天在工作中遇到一个神奇的问题,是我之前使用lua没有遇见过的,具体情况是这样的:
一个叫RankList的lua模块,有一个GetRankList(rank_type,rank_sub_type)的函数
需要在UIRankList的lua模块中调用这个函数。
即:
这个RankType.RT_QUALIFYING_NEW_STATS 的类型是userdata,是在c#层定义的一个enum。
然后我得到了一个报错说这个索引查不到东西----nil
我在调用函数内部打印了第一个参数居然是table类型,然后我瞬间蒙逼..
what a fuck?????
原来
在lua中有这样一个语法糖,模块调用函数如果访问符是 : ,lua就会自动默认你的第一个参数是这个调用的模块自身,也就是说我刚才测试打印的函数内的第一个参数其实是self,也就当然是table了.
其实前几天也遇见过类似的情况就是在模块内部调用成员函数的时候,我写成了 "." 来调用,然后使用self.获得成员变量,这样也就出错了,因为这个self是找不到的.
一个叫RankList的lua模块,有一个GetRankList(rank_type,rank_sub_type)的函数
需要在UIRankList的lua模块中调用这个函数。
即:
这个RankType.RT_QUALIFYING_NEW_STATS 的类型是userdata,是在c#层定义的一个enum。
然后我得到了一个报错说这个索引查不到东西----nil
我在调用函数内部打印了第一个参数居然是table类型,然后我瞬间蒙逼..
what a fuck?????
原来
在lua中有这样一个语法糖,模块调用函数如果访问符是 : ,lua就会自动默认你的第一个参数是这个调用的模块自身,也就是说我刚才测试打印的函数内的第一个参数其实是self,也就当然是table了.
其实前几天也遇见过类似的情况就是在模块内部调用成员函数的时候,我写成了 "." 来调用,然后使用self.获得成员变量,这样也就出错了,因为这个self是找不到的.
相关文章推荐
- LuaJavaBridge - Lua 与 Java 互操作的简单解决方案
- 使用Lua编写Web端模板引擎的实例代码分享
- lua计算时间差 按照日历方式来计算时间差 而不是固定每个月都是多少天来计算
- 编译lua5.3扩展.so文件时遇到的一些问题总结
- Metatable 对象默认的操作方式
- lua 闭包
- Metatable与面向对象、继承
- lua 读取lua文件
- 【转】编译Lua5.3.0的iOS静态库
- 多线程中的lua同步问题
- luarocks学习
- lua package匹配机制
- Lua函数
- xavante运行cgilua流程
- Vim 7.4.1952 with Python/Ruby/Lua/Perl/C Syntax built for Ubuntu 16.04 x86_64
- Lua自己实现angle角
- lua中.和:区别
- lua and or not 逻辑运算符
- lua源代码执行顺序
- lua 打印调试日记