Lua中调用函数使用点号和冒号的区别

最简单的类

TSprite = {
        x = 0,
        y = 0,
    }
    function TSprite.setPosition(x, y)
        TSprite.x = x;
        TSprite.y = y;
    end

    TSprite.setPosition(1, 2);
    print("TSprite坐标(" .. TSprite.x .. "," .. TSprite.y .. ")");

mSprite.setPosition

TSprite = {
        x = 0,
        y = 0,
    }
    function TSprite.setPosition(x, y)
        TSprite.x = x;
        TSprite.y = y;
    end

    TSprite.setPosition(1, 2);
    print("TSprite坐标(" .. TSprite.x .. "," .. TSprite.y .. ")");

mSprite:setPosition

TSprite = {
        x = 0,
        y = 0,
    }
    function TSprite:setPosition(x, y)
        self.x = x;
        self.y = y;
    end
    local who = TSprite;
    TSprite = nil;

    who:setPosition(1, 2);

输出:

 TSprite坐标(1,2)

冒号的作用就是:定义函数时,给函数的添加隐藏的第一个参数self;调用函数时,默认把当前调用者作为第一个参数传递进去。

使用了冒号之后,就相当于我们刚刚使用点号时一样,只是我们不再需要显式地定义self参数以及主动地传递who参数。

时间: 2024-11-11 13:28:54

Lua中调用函数使用点号和冒号的区别的相关文章

Lua中调用C函数

Lua利用一个虚拟的堆栈来给C传递值或从C获取值.每当Lua调用C函数,都会获得一个新的堆栈,该堆栈初始包含所有的调用C函数所需要的参数值(Lua传给C函数的调用实参),并且C函数执行完毕后,会把返回值压入这个栈(Lua从中拿到C函数调用结果). 于此相关的C API有几个比较重要的定义如下: (1)typedef struct lua_State lua_State; lua虚拟机(或叫解释器),可以理解为一个thread,和一个完整的Lua虚拟环境的执行状态. (2)typedef int

Lua中调用C函数(lua-5.2.3)

Lua可以调用C函数的能力将极大的提高Lua的可扩展性和可用性. 对于有些和操作系统相关的功能,或者是对效率要求较高的模块,我们完全可以通过C函数来实现,之后再通过Lua调用指定的C函数. 对于那些可被Lua调用的C函数而言,其接口必须遵循Lua要求的形式,即typedef int (*lua_CFunction)(lua_State* L). 简单说明一下,该函数类型仅仅包含一个表示Lua环境的指针作为其唯一的参数,实现者可以通过该指针进一步获取Lua代码中实际传入的参数.返回值是整型,表示该

Lua中调用 cocos2d-x 的滑动条/滚动条 ScrollView

 ScrollView 我想玩儿过手机的朋友对滑动条都不陌生吧,(旁边: 这不是废话么???? )   那好吧,废话不多说直接开始ScrollView吧 local m_BaseNode  -- 主场景 local CreateScroll    -- 房间分级滑动视图 local CreateStageNode   -- 创建节点 local m_ScrollView              -- 滑动层变量 local m_Inner     -- 内容器 local addScrol

Lua中的函数

[前言] Lua中的函数和C++中的函数的含义是一致的,Lua中的函数格式如下: function MyFunc(param) -- Do something end 在调用函数时,也需要将对应的参数放在一对圆括号中,即使调用函数时没有参数,也必须写出一对空括号.对于这个规则只有一种特殊的例外情况:一个函数若只有一个参数,并且此参数是一个字符串或table构造式,那么圆括号便可以省略掉.看以下代码: print "Hello World" --> print("Hell

Lua中“.”调用方法与“:”调用方法的区别

Lua中"."调用方法与":"调用方法的区别:                                                                                                                         一.概述 学lua的时候有一个迷惑点,就是搞不清楚'.'与':'调用方法的区别,今天很早就起来看了看一个大牛的视频讲解,才顿悟了:'.'调用和':'实际是传递参数的个数不同而已,':

c++中调用函数实质

(m_pListener->*m_pfnSelector)(this); m_pListener是class的实例 m_pFnSelector是存的函数的指针 这句可能要稍微解释下,其实也挺好懂的.首先前面这个括号就是对应的函数,后面的this就是参数,这个满足对函数指针的定义,即void (CCObject::*)(CCObject*); 因为CCMenuItem基类是CCObject,那其实调用的场景(CScene)基类也一样.然后就是m_pListener->*m_pfnSelector

shell从函数文件中调用函数

碰到一个shell中函数调用的小问题,记录一下. shell中函数有三种调用方式,一种是在文件前面定义函数,然后在下面直接调用:一种是通过载入shell,在shell中直接调用:第三种是将函数写入文件,然后在其他shell中调用函数. 这里写一下关于第三种方法的例子: is_it_a_directory() { if [ $# -lt 1 ];then echo "is_it_a_directory:I need an argument" return 1 fi _DIRECTORY_

(转)在JSP中调用JAVA类和使用JavaBean有什么区别?

在JSP中调用JAVA类和使用JavaBean有什么区别? 可以像使用一般的类一样使用JavaBean,Bean只是一种特殊的类.特殊在可以通过<jsp:useBean   />调用JavaBean而其他类,可以和一般java中一样使用.  Bean的参数中还可以指定范围, <jsp:useBean  scope="application"   />该Bean在服务器的JVM中将只有一个实例. Bean是和WebServer相关的,不同的页面可以通过Bean 交

C++调用lua中的函数

测试lua脚本 一.lua中的全局函数 lua中的全局函数保存在lua的global表里 二.lua模块中的函数 lua中的模块被放在lua的global表里,模块中的函数以变量的形式保存在模块表里,比如test模块里的PrintMessage函数保存在test表里,key为PrintMessage,value是函数体.所以调用模块里的函数,首先lua_getglobal把模块压入栈,接着lua_gettable或lua_getfield把函数压入栈,最后lua_pcall调用函数.