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

 

 

你可能感兴趣的:(lua)