ITPub博客

首页 > 应用开发 > IT综合 > Lua学习笔记(一)

Lua学习笔记(一)

原创 IT综合 作者:壹頁書 时间:2015-11-30 20:09:17 0 删除 编辑
构造一个空的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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 开始学习OpenResty
请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6339948