lua 中调用函数的坑点

原创 2016年06月24日 20:07:09

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



相关文章推荐

在c中调用lua函数,获取返回值等

偶们这次主要说说怎么由Lua定义函数, 然后在C或者C++中调用. 这里偶们暂不涉及C++的对象问题, 只讨论调用函数的参数, 返回值和全局变量的使用.   2.   这里偶们在e12.lua里先...
  • cws1214
  • cws1214
  • 2013年11月13日 13:46
  • 8395

简单C++调用lua函数及C++和lua相互函数调用小例子

http://blog.csdn.net/ym012/article/details/7191932 //简单C++调用lua函数,改自网络 //test.cpp [cpp] v...
  • lqk1985
  • lqk1985
  • 2012年03月21日 23:23
  • 11624

Lua函数的几种用法详解

一、lua函数 在面向对象语言中函数是一组一起执行任务的语句。可以把代码放到独立的函数中。怎么划分代码功能之间的不同,但在逻辑上划分通常是让每个函数执行特定的任务。在Lua中,函数是作为"第一类值"来...

Lua加载模块

模块 我们可以直接使用require(“model_name”)来载入别的lua文件,文件的后缀是.lua。载入的时候就直接执行那个文件了。比如: 我们有一个hello.lua的文件: 复制代码...

Lua自己实现载入一个模块

当在模块名前面有一个"." 时,import() 会从当前模块所在目录中查找其他模块。因此 MyClass 及其相关文件不管存放到什么目录里,我们都不再需要修改 MyClass 中的 import()...

如何去掉lua函数调用前的self

云风的lua oo 实现方法 http://blog.codingnow.com/2006/06/oo_lua.html 继续在云风的类上改 setmetatable(class...
  • lqk1985
  • lqk1985
  • 2012年01月12日 15:33
  • 4114

Lua中关于求模与求余的区别介绍

很多人搞不清楚这两个概念的区别,刚好在翻译lua手册时遇到%与math.fmod这两个操作,顺便做一下说明吧。求模与求余的区别:假设对a与b两个整数做求模或求余操作。那么第一步是先求整数商c,即a /...

lua函数精讲(二)

Lua中的函数带有词法定界的第一类值。 第一类值: 在Lua中,函数和其他值(数值,字符串)一样,函数可以被存放在变量中,也存放在表中, 可以作为函数的参数,还可以作为函数的返回值。 词法...

Lua基础 函数(一)

在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。下面有3个例子,分别将函数当作一条语句;当作表达式(后面两个是一类)。 print(8*9...

lua中关于.和:调用函数

lua中关于.和:调用函数 lua中表不仅在某种意义上是一种对象,想对象一样,表也有状态; 也有与对象的值队里的本性,特别是拥有两个不同值得对象代表两个不同的对象;一个对象在不同的时候也可以有...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:lua 中调用函数的坑点
举报原因:
原因补充:

(最多只允许输入30个字)