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参数。