Lua學習筆記(一)

壹頁書發表於2015-11-30
構造一個空的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部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1849985/,如需轉載,請註明出處,否則將追究法律責任。

相關文章