while

1
2
3
4
while(条件)
do
循环体
end

代码示例及结果:

1
2
3
4
5
6
a = 0
while(a < 10)
do
print(a)
a = a + 1
end
1
2
3
4
5
6
7
8
9
10
0
1
2
3
4
5
6
7
8
9

for

1
2
3
for var=值1,值2,值2 do
循环体
end

从值1变化到值2,每次变化以值3为步长,执行一次循环体。表达式3不指定时默认为1.

代码示例及结果:

1
2
3
for i = 0,10 do
print(i)
end
1
2
3
4
5
6
7
8
9
10
11
0
1
2
3
4
5
6
7
8
9
10

变化范围包含值2

for 遍历table:

1
2
3
4
table = {"a","b","c"}
for i,v in ipairs(table) do
print(i,v)
end
1
2
3
1	a
2 b
3 c

repeat…until

1
2
3
repeat
循环体
until(条件语句)

执行循环体,直到条件语句成立

代码示例及结果:

1
2
3
4
5
i = 0
repeat
print(i)
i = i+1
until(i>10)
1
2
3
4
5
6
7
8
9
10
11
0
1
2
3
4
5
6
7
8
9
10

和其他语言一样,break 可以跳出循环。

判断语句

if

1
2
3
4
if(条件语句)
then
执行语句
end

代码示例及结果:

1
2
3
4
5
a = 10
if(a>0)
then
print("a>0")
end

a>0

if…else

1
2
3
4
5
6
if(条件语句)
then
条件为真时语句
else
条件为假时语句
end

代码示例及结果:

1
2
3
4
5
6
7
a = 10
if(a> 20)
then
print("a>20")
else
print("a<=20")
end

a<=20

if…elseif…else

1
2
3
4
5
6
7
8
9
10
11
12
if(条件一)
then
条件一为真执行
elseif(条件二)
then
条件二为真执行
elseif(条件N)
then
条件N为真执行
else
以上都不满足的条件执行
end

代码示例及结果:

1
2
3
4
5
6
7
8
9
10
local score = 55
if(score >= 80 and score <= 100)
then
print("A")
elseif(score < 80 and score>= 60)
then
print("B")
else
print("C")
end

c

函数

函数定义

1
2
3
4
optional_function_scope function ( argument1, argument2, argument3..., argumentn)
function_body
return result_params_comma_separated
end
  • optional_function_scope 指定函数是全局还是局部函数,默认不写是全局,局部是local
  • function_name 函数名
  • argument 参数列表
  • function_body 函数体
  • result_params_comma_separated 返回值,可以返回多个值,逗号隔开
1
2
3
4
5
6
7
8
9
10

function max(num1,num2)
if(num1 > num2)
then
result = num1
else
result = num2
end
return result
end

lua 中可以将函数作为参数传递,作为回调函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
--登录回调
callback = function(errorId)
print("errorId:"..errorId)
end
--登录方法
function login(userName,passworld,loginCallback)
if(userName == "123" and passworld == "123456") then
loginCallback(0)
else
loginCallback(-1)
end
end
login("123","123456",callback)

返回多值

如字符换查找,返回开始和结束的位置:(索引从1开始)

1
2
s,e = string.find("hello world","world")
print(s,e)
1
2
3
4
5
6
7
8
9
10
11
12
13
function maxinum(array)
local index = 1
local max = array[index]
for i,v in ipairs(array) do
if(v > max) then
index = i
max = v
end
end
return index,max
end
index,max = maxinum({3,77,34,22,566,7,32,6})
print(index,max)

5 566

可变参数

Lua中可变参数和c,java中一样,用三个点…表示

1
2
3
4
5
6
7
8
function add(...)
sum = 0
for i,v in ipairs{...} do --{...}表示可变参数的数组
sum = sum + v
end
return sum
end
print(add(1,2,3,4))
1
2
3
4
5
local arg = {...} -- 将可变参数赋值给局部变量
length = #arg --求可变参数的参数数量

select('#',...) --求可变参数的参数数量
select(n,...) -- 访问 n 到 select('#',…) 的参数(多个值)