說明:
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