LUA速成教程

說明:

1.該教程適合對編程有一定了解的人員。

2.該教程在WINDOWS下實驗。

切入正題,

1.首先下載Notepad++,工欲善其事,必先利其器,然後安裝NotePad++的插件NppExec。如果不甚了解,可以度娘或者谷歌。

接著下載Lua,在環境變量中加入LUA的路徑。如果不甚了解也請度娘。

2.配置NppExec,如下圖,對幾個重要的屬性打勾,並將Direct Excecute Previous的快捷鍵改為F9,因為更方便使用,可以使用“設置”->“管理快捷鍵”->"Plugin commonds"進行更改。

然後按F6,彈出下圖,進行配置自動運行腳本的命令:

因為我安裝的是52版本的LUA,所以我使用LUA52,如果你的版本不同,這個命令行就有可能不同。

然後點SAVE進行保存。

3.LUA簡單說明,

1).LUA的語句塊使用 end 結束,

2).使用 逗號 , 進行分隔

3).只有函數聲明和函數調用參數才使用小括號 (),然後地方均不用括號

4)變量是無類型的,即為任何為類型。

好了,可以寫一個簡單的1+... + 100 的小程序了:

sum = 0
for i=0,100 do
    sum = sum + i
end

print ("sum = ",sum)

小小分析一下,for 使用 do 開始,end結束,i=0,100,使用逗號進行分隔,從0開始,100結束,函數print支持多參數。for 還支持步數,看下面的程序:

for i=0,10,2 do
    print (i)
end

試驗一下,發現,會打印 0,2,4,8,10,因為是以2為步數,即每次i+2

循環還有 while do ... end, repeat ... until ...,注意前面說的,只有函數才用括號,所以until , while 等是不用括號的。

4. 函數。函數太好玩了,可以接收多參數,可以返回多參數。我們寫一個加法函數:

function add (a,b)
    return a,b,a+b
end

再調用

print (add(1,2))

我想結果你已經看到了。

5.最好用的結構體:table,使用非常簡單:變量名={},如果大括號內為內,這個表就為空。注意前面說的,使用逗號進行分隔。

來看一下代碼:


g_id = 1
shape = {
    name="what",
    id=1,
    
    rect = { x=0, y=0, w=100, h=100},
    font = { name="PMingLiU", size=11 }
}


function GenerateShape ()
    local _s2 = shape
    g_id = g_id + 1
    _s2.id = g_id
    _s2.name="good".. g_id
    return _s2
end

function PrintShape (s)
    print (s.name, s.id, s.rect.x, s.font.name)
end

PrintShape (shape)
s2 = GenerateShape ()
PrintShape (s2)
PrintShape (shape)

s3 = GenerateShape ();
PrintShape (s2)
PrintShape (s3)
PrintShape (shape)

我定義了一個 GenerateShape (),用於自動產生一個shape,它的ID自動加1,使用一個全局變量 shape,它有默認值。當我們打印結果的時候,很自然的發現,他們全部一樣了,於是我們發現,LUA是不支持C/C++的傳值的,全部是引用。於是又改進了下:

g_id = 1
shape = {
    name="what",
    id=1,
    
    rect = { x=0, y=0, w=100, h=100},
    font = { name="PMingLiU", size=11 }
}


function GenerateShape ()
    local _s2 = {
        name="what",
        id=1,
        
        rect = { x=0, y=0, w=100, h=100},
        font = { name="PMingLiU", size=11 }
    }
    
    return _s2
end



function InitShape (s,name)
    g_id = g_id + 1
    s.id = g_id
    s.name=name
end

function PrintShape (s)
    print (s.name, s.id, s.rect.x, s.font.name)
end

PrintShape (shape)
s2 = GenerateShape ()
InitShape (s2,"s2")
PrintShape (s2)
PrintShape (shape)

s3 = GenerateShape ();
InitShape (s3, "s3")
PrintShape (s2)
PrintShape (s3)
PrintShape (shape)

很顯然我們已經可以得到正確的變量了。

另外要注意的就是,table相當於一個字典,看下面的函數名對應函數,注意,函數也可以當作是一個變量:

function add(a,b)
    return a+b
end

function minus (a,b)
    return a-b
end

funs = {}

funs [add] = "add"
funs [minus] = "minus"

for n,v in pairs (funs) do
    print (n,v)
end

在for語句中,n是key, v是value,打印結果是很一目瞭然的。

關於一點小技巧,就是如果函數多個返回值,可能我們不需要前面幾個值(後面不需要,可以不填,會自動忽略),可以使用“_"進行一下佔位,如:

function add (a,b)
    return a,b,a+b
end

_,_,sum = add(1,2)

print (sum)

好了,寫到這裡了,不寫了。想要深入,就可以學習標準庫:string, io, math, 等,以及與C語言如何交互。

这里有一篇相当好的总结,:

http://www.cnblogs.com/ly4cn/archive/2006/08/04/467550.html

原文地址:https://www.cnblogs.com/lin1270/p/3601824.html