区分什么时候用点什么时候用冒号
两点: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