lua中self的意义

最近在用合宙的Air302开发物联网项目,因为合宙用的自家的luatOS操作系统,二次开发全都要用lua写,据说lua写起代码比C更方便,但是不会就是不会啊喂!!学不会就是不方便啊,例如这个self理解起来就有点困难。

lua中的数据类型

lua中一共有8种基本的数据类型,而且变量不需要类型定义,也就是不需要类型的声明。只需要为变量赋值。值可以存储在变量中,作为参数传递或结果返回。

数据类型描述
nil表示一个无效值(在条件表达式中相当于false)。
boolean包含两个值:false和true
number表示双精度类型的实浮点数
string字符串由一对双引号或单引号来表示
function由C或lua编写的函数
userdata表示任意存储在变量中的C数据结构
thread表示执行独立线路,用于执行协同程序
tablelua中的表(table)其实是一个“关联数组”,数组的索引可以是数字、字符串或表类型。在lua中,table的创建是通过“构造表达式”来完成,最简单构造表达式是{},用来创建一个空表。

以上数据类型资料摘自RUNOOB网

self表示的变量类型

从数据类型表可以看出来lua没有指针类,所以猜测self应该不是一个指针,这和C++中的this指针还是有区别的。这里我是将它理解成一个表的复制。也就是本身。

self的用法

这里解释一下有关函数的定义方式,lua中函数的定义可以有两种方式。
一种是

function MainScene:onCreate()

另一种是

function MainScene.onCreate(self)

上面两种定义方式是等价的,因此用冒号定义函数时,会给函数添加隐藏的第一个参数self,调用函数时,默认把当前调用者作为第一个参数传递进去。
下面展示不同的定义函数方式

shape = {side = 4}
function shape.set_side(shape, side)
	shape.side = side
end

function shape.prit_area(shape)
	print(shape.side * shape.side)
end

print(shape.side)
shape.set_side(shape, 5)
print(shape.side)
shape.print_area(shape)

运行结果为:

4
5
25

上面是用.来定义和访问函数的方法。下面用:来实现同样功能的改写。

shape = {side = 4}
function shape:set_side(side)
	self.side = side
end

function shape:print_area()
	print(self.side * self.side)
end

print(shape.side)
shape:set_side(5)
print(shape.side)
shape:print_area()

运行结果

4
5
25

上面的两个例子我们可以看出:冒号定义和冒号调用其实跟上面的效果一样,只是把第一个隐藏参数省略了。而self则是只想调用者自身。
当然,我们也可以用点号.来定义函数,而用冒号:来调用函数。或者冒号定义点号调用。如下:

shape = {side = 4}
function shape.set_side(shape, side)
    shape.side = side
end

function shape.print_area(shape)
    print(shape.side * shape.side)
end

print(shape.side)
shape:set_side(5)
print(shape.side)
shape:print_area()

或者

shape = {side = 4}
function shape:set_side(side)
    self.side = side
end

function shape:print_area()
    print(self.side * self.side)
end

print(shape.side)
shape.set_side(shape, 5)
print(shape.side)
shape.print_area(shape)

上述运行结果:

4
5
25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值