--lua的do~while循环是这样写的:
--[[
i=1
repeat --do
print(i) --注意,repeat循环是不用以do作为代码块的开端的
i=i+1
until i>=10 --while(i<=10),即i>=10的时候结束循环
]]
--lua中的foreach循环:
--[[
table_1={"one","two","three","four","five"}
table_2={}
--ipairs函数返回一个遍历集合的迭代器,类似于foreach循环,即“返回一个迭代器给value并用它访问集合中的所有元素”
for key,value in ipairs(table_1) do
print("key:"..key..",value:"..value)
table_2[key]=value --遍历并打印table_1,并将其中的值赋给table_2
end
for key in ipairs(table_2) do
print(table_2[key])
end
]]
--*************lua中的函数*************
--lua中使用function关键字定义一个函数,后跟函数名,与通常的编程语言类似
--[[
function add(x,y)
return x+y --返回x+y的结果
end
print(add(1,2)) --打印结果
]]
--需要注意的是,lua中形参和实参的数量可以不一致,多出的部分会被lua省略,而缺少的则会成为nil
--lua中的函数还可以有多个返回值
--一个有多个返回值的函数:
--[[
function func()
return 1,2 --需要多个返回值时,用逗号将返回值隔开
end
x,y=func()
print(x)
print(y)
]]
--另一个例子:找出table中的最大元素和其下标
--[[
function getMax(table)
local index=1
local var=table[index]
for key,value in ipairs(table) do
if value>var then
index,var=key,value --等价于:index=key;var=value
end
end
return index,var--返回下标和对应的值
end--end function
local index,var=getMax({2,4,3,5,1,6,9,7,8,1})
print("index:"..index..",var:"..var)
]]
--需要注意的是,如果一个函数不是一个表达式中的最后一个元素,则该函数只返回第一个值
--例子如下:
--[[
function func()
return 1,2,3
end
local x,y=func(),20
--x:1,y:20
print(x)
print(y)
]]
--还可以把函数定义到table中,像这样
--[[
table={1,function()return "function of the table" end} --类似于匿名函数,table的第二个元素是一个函数
print(table[1])
print(table[2]()) --调用
--还可以这样,将一个函数赋给变量:
local func=function() return "a function" end
table_2={1,func}
print(table_2[2]())
]]
--[[
--对于lua中函数,其参数数量也是可变的
--使用...定义一个可以接受若干参数的函数
function func(...)--...表示函数可以接受若干数量的参数,在函数中访问他们也需要使用...
for key,value in ipairs{...} do--需要注意的是,...是一个表达式,使用ipairs访问他们时候,要用花括号括起来
print(value)
end--end loop
end-- end of function
func(1.0,'2',false,nil)
--在可接受若干参数的函数中,仍然可以使用固定参数,但要保证固定参数处于不定量的参数前边
--像这样
function func_2(arg1,arg2,...)
print('first arg:'..arg1)
print('second arg:'..arg2)
for key,value in ipairs{...} do
print(value)
end --end loop
end--end of function
firstArg=1
secondArg=2
func_2(firstArg,secondArg,3,4,5,6)
]]
--补充:定义一个table后,可用.运算符访问其中元素,类似于面向对象编程语言的方式
--[[
obj={name='S0nrEir',age='23',height='180'}
print(obj.name)
print(obj.age)
print(obj.height)
]]
--在lua中,所有函数本质上都是匿名的,在调用函数时,实际上我们都是在访问“持有”该函数的变量
--比如说print函数:
--[[
local log=print
log("another name of function 'print'")
local anotherLog=log
anotherLog("another name of function 'log'")
--同样可以使用这样的方式定义&调用一个函数
local add=function(arg1,arg2) return arg1+arg2 end --一个匿名函数
print(add(10,20))--10+20=30
]]
--lua中的闭包函数:
--闭包函数2即:将一个函数的定义写在另一个函数当中,则该函数可以访问外部函数的局部变量
--[[
function funcClosure()--定义一个闭包函数
local var=0
return function()-- 定义一个闭包函数中的匿名函数,返回一个函数的返回值
var=var+1
return var
end -- end of function
end --end of function
f=funcClosure()
f2=funcClosure()
print('first call of f:'..f())
print('second call of f:'..f())
print('first call of f2:'..f2())
--结果是1,2,1
--即:一个闭包函数执行完后 ,其中的局部变量的值会被保留,用于以后的计算
]]
lua备忘录(二)
最新推荐文章于 2024-08-22 10:45:21 发布