Lua 高级语法
时间:2018/10/18 10:55:52
参考:
Lua 高级语法#
元表 (meattable)#
类似于其他语言的重载操作,重载运算操作 如 +
等。
Lua 提供了两个用来处理元表的方法:
setmetatable(table, metatable)
:此方法用于为一个表设置元表。getmetatable(table)
:此方法用于获取表的元表对象。
可以重载的方法:
元方法 | 含义 |
---|---|
"__add" | + 操作 |
"__sub" | - 操作 其行为类似于 "add" 操作 |
"__mul" | * 操作 其行为类似于 "add" 操作 |
"__div" | / 操作 其行为类似于 "add" 操作 |
"__mod" | % 操作 其行为类似于 "add" 操作 |
"__pow" | ^ (幂)操作 其行为类似于 "add" 操作 |
"__unm" | 一元 - 操作 |
"__concat" | .. (字符串连接)操作 |
"__len" | # 操作 |
"__eq" | == 操作 函数 getcomphandler 定义了 Lua 怎样选择一个处理器来作比较操作 仅在两个对象类型相同且有对应操作相同的元方法时才起效 |
"__lt" | < 操作 |
"__le" | <= 操作 |
"__index" | 取下标操作用于访问 table[key],根据下标访问元素,当表中不存在对应元素的时候,通过重载的函数返回对应的值 |
"__newindex" | 赋值给指定下标 table[key] = value |
"__tostring" | 转换成字符串 |
"__call" | 当 Lua 调用一个值时调用 |
"__mode" | 用于弱表(week table) |
"__metatable" | 用于保护metatable不被访问 |
重载 +
操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
面向对象#
对象定义和使用#
注:通过 :
定义和调用函数,self
参数省略。通过 .
不能省略。
通过 __index
元表实现对象,表中找不到对应元素则会从 __index
指定的表中查找。
定义对象 person.lua
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
初始化和使用对象:
1 2 3 4 5 6 7 8 9 |
|
继承#
继承可以用元表实现,它提供了在父类中查找存在的方法和变量的机制。在 Lua 中是不推荐使用继承方式完成构造的,这样做引入的问题可能比解决的问题要多。
成员私有性#
在 Lua 中,成员的私有性,使用类似于函数闭包的形式来实现。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
虚变量#
_
表示虚变量,可以用来接收并丢弃多余的返回值,或者迭代器结果。