今天在工作中遇到一个神奇的问题,是我之前使用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是找不到的.