Lua是一個小巧的腳本語言,該語言設計的目的是爲了嵌入應用程序中,從而爲應用程序提供靈活的擴展和定製功能。html
那麼爲何要學習Lua語言了?僅僅上面這些優勢是不夠的,通常來講,Lua主要用於遊戲開發中,性能不錯,也能夠看成配置文件。而對於性能要求不高的應用,強大的Python是更好的選擇。git
要學習Lua,天然離不開實踐,我是在Win8下用VS2013來編譯Lua源代碼的,編譯完成後能夠獲得一個Lua解釋器,能夠直接運行咱們的腳本。先去官網下載Lua源代碼,而後用Visual Studio建立一個C++控制檯解決方案,默認不包含代碼。接着把src文件夾複製到項目目錄下,在VS中添加所需代碼。咱們一共須要建立3個項目,Lua5.2項目做爲靜態庫,生成Lib文件;Lua項目做爲解釋器,引用Lua5.2項目,生成exe文件;Luac做爲編譯器,引用Lua5.2項目。src文件夾中,lua.c文件不要添加到庫Lua5.2中,要單獨添加到Lua中;luac.c文件則添加到Luac項目中。須要注意的是,在編譯爲lib文件時,須要作以下配置:C/C++ --> 高級 --> 編譯爲 --> 選擇「編譯爲C++代碼(/TP)」,不然使用lua lib庫的時候會報連接錯誤。不知道怎麼弄的能夠直接下載我提供的Lua工程代碼,點擊下載。弄好後,獲得Lua.exe,Luac.exe和Lua5.2.lib文件,咱們把這些文件放入一個Lua文件夾中,加入到系統環境變量Path中能夠直接在CMD下使用。github
那麼用什麼代碼編輯器了?這裏推薦使用sublime,加上插件確實方便,https://github.com/leitwolf/LuaTools。不過代碼提示不夠好,使用io函數時會報錯,我也不知道用什麼好,隨意吧。好了,若是你把lua.exe加入到了環境變量中,就能夠在Windows下直接運行Lua命令來啓動解釋器了。輸入print('hello')就能夠獲得輸出結果,但你確定不想這麼寫程序,因此仍是用編輯器建立一個.lua文件比較好,而後在CMD中輸入命令lua file.lua就能夠獲得運行結果了。下面總結一下這些經常使用的命令格式。編程
在CMD模式下,就是沒有直接運行lua.exe的狀況下,格式以下,前面的是命令,後面是註釋:數組
lua options script args;
lua -e "print('hello')", to execute code;
lua -i -llib, to load lib library;
lua -e "a=1" a b c, so arg[0] = "a", arg[1] = "b",
arg [-1] = "a=1", arg[-2] = "-e", arg[-3] = "lua";多線程
在運行了Lua.exe的交互模式下,格式以下:閉包
=4*3, as a calculator;
os.exit(), to exit the console;
dofile("test.lua"), to execute and load function;
use "do ... end" for a complete chunk編輯器
下面咱們建立一個test.lua測試文件,一個簡單的函數:函數式編程
function fact(n) if n < 0 then
return nil
elseif n == 0 then
return 1
else
return n * fact(n-1) end
end
print(fact(-4)) print("filename: " .. arg[0] .. "\n")
function表示函數,後面是函數名和參數。能夠看到,語句之間不須要分隔符,但你使用;並無錯。if語句和函數以end做爲結尾,也不須要指定返回值類型。函數
Lua是一個自由格式的語言,變量名能夠由任意字符構成,但不能以數字開頭,也不能是經常使用的關鍵字。Lua是區分大小寫的。經常使用的關鍵字有:and, or, not, if, else, elseif, then, end, true, false, nil, goto, function, for, do, while, until, break, return, in, local, repeat。
Lua是動態腳本語言,這意味着「變量」沒有類型,只有「值」有類型。語言中不存在類型定義,全部的值擁有自身類型。Lua中的八種基礎數據類型,能夠用type函數查看類型:
Tables,functions,threads,full userdata的value都是objects(變量並不包含值,只是這些值的引用)。
關於Lua的學習,推薦Programming in Lua第三版這本書,英文的,不懂的能夠對照第二版中文的看。本覺得Lua的知識不多,寫點東西就沒了,但學完後才發現太多了,因此就不繼續了。
推薦一個學習項目,https://github.com/xfbs/PiL3;還有這篇博文
http://www.cnblogs.com/stephen-liu74/archive/2012/06/13/2407507.html