lua程序设计(2) - 语句和函数

1、lua允许多重赋值

a,b = 10, 2*x

2、交换x和y的值

x,y = y,x

3、如果多重赋值等号左边的变量名多余右边的值,则右边的少于左边的值会以nil代替,反之右边多余的值会被去掉

例如:

a,b,c = 0;
print(a,b,c) – 0,nil,nil
a,b,c = 0,0,0
print(a,b,c) – 0,0,0

4、一般多重赋值用来接收函数的2个返回值,比如:

a,b = f()
则a和b分别被赋值了函数f的返回值

5、全局变量和局部变量

j = 10 – 全局变量
local i = 1 – 局部变量
局部变量仅作用于声明它的那个块,一个块是一个程序体,例如下面,从while到end是一个程序块
x=10
local i =1
while i <= x
do
local x = i*2
print(x)
i = i + 1
end

6、显示的声明一个程序块

do
local a = 1
local b = 2
end

7、一个局部变量和局部变量同名的例子:

local a,b = 1,10
if a<b then
print(a) – 1
local a
print(a) –nil
end
print(a,b) – 1 10

8、在lua中有一种书写习惯

local foo = foo
利用全局变量赋值给局部变量可以暂存全局变量而且会加速程序

9、if语句,lua不支持switch语句

if op == ‘+’ then
r=a+b
elseif op == ‘-‘ then
r=a-b
else
r=a*b
end

10、while语句

如果条件为假则循环结束,否则一直执行下去
local i = 1
while a[i] do
print(a[i])
i = i + 1
end

11、repeat until至少执行循环一次

repeat
line = io.read()
until line ~= “”

12、for循环

for var=exp1,exp2,exp3
<执行体>
end
var从exp1变化到exp2,每次步长为exp3,exp3是可选的,默认为1
注意i是局部变量,所以在循环体外去读取循环变量会出现错误
例如
for i=1,10 do
print(i)
end
max = i –错误!

13、for迭代器

a={x=1,y=2;3,4,5}
for i,v in ipairs(a) do
print(i,v)
end
这里将只叠代a表格数组部分,结果为
1 3
2 4
3 5

14、for迭代器2

a={x=1,y=2;3,4,5}
for i,v in pairs(a) do
print(i,v)
end
这里将叠代所有atable的key和value,结果为
1 3
2 4
3 5
y 2
x 1

15、return和break

break用于跳出循环
return用于跳出函数

16、一个简单的函数例子

function add(a)
local sum=0
for i,v in ipairs(a) do
sum = sum + v
end
return sum
end

17、函数多重返回值

return a,b
这样就可以返回多个值

18、可以讲函数放入一个圆括号中,迫使它只返回一个值

19、unpack

x = {1,2,3,4}
print(unpack(x))
a,b,c,d = unpack(x)
print(a,b,c,d)
结果为:
1 2 3 4
1 2 3 4

20、变长参数

function add(…)
local s=0
local a,b = … – 获得可变参数的前2个
print(a,b)
for i,v in ipairs({…}) do
s = s + v
end
return s
end

print(add(3,4,10,25,12))

21、select选择器

select(‘#’, …) 返回可变参数的长度总数
select(i, …) 返回可变参数的第i个参数

22、当参数为一个table时,函数调用的圆括号是可有可无的

rename{old=”temp.lua”, new=”temp1.lua”}

23、异常try catch使用 pcall

local status, err = pcall(function() error({code=121}) end)

24、throw 异常使用error函数

function foo(str)
if type(str) ~= “string” then
error(“string expected”)
end

end

25、print(debug.traceback())

独立的Lua解释器用来构建错误信息的函数就是debug.traceback。你可以在任何时候调用debug.traceback获取当前运行状况的跟踪信息