构造一个空的table,接收终端的输入
a={}
for i=1,5 do
a[i]=io.read()
end
#a可以获取table a的最后一个元素的索引.遍历table
for i=1,#a do
print(a[i])
end
清空最后一个元素
a[#a]=nil
获取最后一个元素
print(a[#a])
追加元素
a[#a+1]="edmond"
选择控制结构
if a<0 then a=0 end
if a
if line>MAXLINES then
line=0
end
if op=="+" then
r=a+b
elseif op=="-" then
r=a-b
else
。。。
end
循环控制结构
local i=1
while a[i] do
print(a[i])
i=i+1
end
用户只要有输入则显示, ~= 等同于 !=
repeat
line=io.read()
until line~=""
print(line)
数字型for循环,三个参数分别是起始位置,终止位置和步长
for i=10,1,-1 do
print(i)
end
字符型for循环
days={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
for k,v in ipairs(days) do
print(k..","..v)
end
函数多值返回
function foo()
。。。
。。。
return "a","b" end
变长参数
function add(...)
local s=0
for k,v in ipairs{...} do
s=s+v
end
return s
end
print(add(1,2,3,4,5))
具名实参
当实参只有一个table构造时,函数调用的圆括号是可以省略的.
function getDatabaseInfo(arg)
print(arg.host)
print(arg.port)
print(arg.database)
print(arg.username)
print(arg.password)
end
getDatabaseInfo{
host="127.0.0.1",
port=3306,
database="mvbox",
username="xx",
password="xx"
}
闭包
function newCounter()
local i=0
return function()
i=i+1
return i
end
end
c1=newCounter()
print(c1())
print(c1())
c2=newCounter()
print(c2())
print(c1())
print(c2())
运算结果
[nginx@localhost~]$./lua_test.lua
1
2
1
3
2
非全局函数
lib={}
lib.foo=function(x,y) return x+y end
lib.goo=function(x,y) return x-y end
print(lib.foo(3,2))
print(lib.goo(4,2))
或者
lib={
foo=function(x,y) return x+y end,
goo=function(x,y) return x-y end
}
print(lib.foo(3,2))
print(lib.goo(4,2))
还可以
lib={}
lib.foo=function(x,y) return x+y end
lib.goo=function(x,y) return x-y end
print(lib.foo(3,2))
print(lib.goo(4,2))
本地函数的递归
错误的方式
local fact=function(n)
if n==0 then return 1
else return n*fact(n-1)
end
end
fact(3)
在调用函数内递归的fact函数时,由于fact函数尚未定义完毕,所以报错
进行如下处理
local fact
fact=function(n)
if n==0 then return 1
else return n*fact(n-1)
end
end
print(fact(3))
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1849985/
,如需转载,请注明出处,否则将追究法律责任。