Lua小心得

变量

删除变量:把变量赋值为 nil

1
2
b = nil
print(b) -- nil

Lua 和 Go 一样支持多变量同时赋值

1
2
3
a, b = 10, 5	-- a=10; b=5;
x, y = y, x -- swap 'x' for 'y'
a, b = f() -- f()有两个返回值

尽可能使用局部变量,优点:

  1. 避免命名冲突。
  2. 访问局部变量的速度比全局变量更快。

数组

  • 不同于其他语言的数组把 0 作为数组的初始索引,在 Lua 里表的默认初始索引一般以 1 开始
  • 声明数组的时候可以 { [key] = value, … };也可以直接 { value, … },这时根据出现的顺序 key 分别为1,2,3,…,且优先级比 [key] = value 高

判断

Lua 把 false 和 nil 看作是”假”,其他的都为”真”

1
2
3
4
5
6
if 0 then
print(true)
else
print(false)
end
-- true

循环

while循环

1
2
3
4
while( true )
do
print("go on forever")
end

for循环

数值for循环

1
2
3
4
-- 1为起始值,10为结束值,2为步长
for i = 1, 10, 2 do
...
end

泛型for循环

1
2
3
for key, val in pairs(tbl_name) do
...
end

Tips:
pairs 迭代 table 元素,可以遍历表中所有的 key ,可以返回 nil ; ipairs 迭代数组元素,不可以返回 nil ,如果遇到 nil 则退出,它按照1,2,3,…的顺序遍历直到遇到值为 nil 的 key为止

until循环

不同于其他循环:until先循环再判断

1
2
3
repeat
statements
while( condition )

函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- ... 表示可变参数,#arg 表示传入参数的个数
function average(...)
result = 0
local arg={...}
for i,v in ipairs(arg) do
result = result + v
end
print("总共传入 " .. #arg .. " 个数")
return result/#arg
end
print("平均值为",average(10,5,3,4,5,6))
--[[
总共传入 6 个数
平均值为 5.5
]]

print(a,b,c)中间会插入\t,io.write(a, b, c)中间无插入;print 会自动调用参数的 tostring 方法

运算符

运算符 功能 举例
.. 连接两个字符串 a..b ,a = “Hello “ , b = “World”, 结果 “Hello World”
# 返回字符串或表的长度 #”Hello” 返回 5
1
print(x^y^z)	-- x^(y^z)

数据库

Lua支持的数据库有:ODBC, ADO, Oracle, MySQL, SQLite 和 PostgreSQL。