lua:回顾当初忽略的——什么时候用点,什么时候用冒号

区分什么时候用点什么时候用冒号

两点:1.看函数的定义;2.看函数的调用

举例1:写一个类,在类中用.定义函数

h = {}

h.x = 0
h.y = 0

function h.cc(x, y)
    print(x, y)
    print(h.x, h.y)  //如果这里写self.x, self.y 会报错attempt to index global 'self' (a                      nil value)   无论是用.调用还是用:调用
end

//调用
h.cc(8, 7) ===>输出 8 7
                    0 0
h:cc(8, 7) ===>输出 table 8 
                     0 0

函数的定义:用点定义相当于给table添加一个字段;用冒号定义相当于隐藏了一个默认参数self。上面例子 用的是点定义的,所以里面 如果调用self则是不存在的,就会报错。

普通函数调用是用点(.),用冒号(:)调用函数会把调用的那个对象当做第一个参数传进去,所以上面例子h:cc(8, 7)输出第一行是 table 和 8,它把h作为第一个参数传进去了。

举例2:写一个类,在类中用:定义函数

h = {}

h.x = 0
h.y = 0

function h:cc(x, y)
    print(x, y);
    print(h.x, h.y);//如果这里写self.x, self.y 在h.cc时会报错attempt to index global 'self' (a nil value)   h:cc则正常打印
end

//调用
h.cc(8, 7); 输出===> 7 nil
                     0 0
h:cc(8, 7); 输出===> 8 7
                     0 0

猜你喜欢

转载自blog.csdn.net/lvyan1994/article/details/83111405