不經意看到這篇《Lua簡明教程》,於是想嘗試一下這個很輕量級的腳本,也號稱性能最高的腳本語言。
一、Lua 語言簡介
Lua(英語發音:/ˈluːə/)程序設計語言是一個簡潔、輕量、可擴展的腳本語言,是葡萄牙語中“Luna”(月亮)的意思。是巴西裡約熱內盧天主教大學(Pontifical Catholic University of Rio de Janeiro)裡的一個研究小組,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所組成並於1993年開發(已經有20多個年頭咯)。 其設計目的是為了嵌入應用程序中,從而為應用程序提供靈活的擴展和定制功能。Lua由標准C編寫而成,幾乎在所有操作系統和平台上都可以編譯,運行。
Lua並沒有提供強大的庫,這是由它的定位決定的。所以Lua不適合作為開發獨立應用程序的語言。Lua 有一個同時進行的JIT項目,提供在特定平台上的即時編譯功能。
二、Lua 安裝
網上搜了一下,好像sudo apt-get、install lua5.2就可以。
我是在Lua官網下載安裝包安裝的(我下載的lua-5.2.3.tar.gz):
1. tar -xvf lua-5.2.3.tar.gz 後 cd lua-5.2.3 進入目錄
www.linuxidc.com @linuxidc:~/Public/lua-5.2.3$ ls
doc Makefile README src
很明顯,Linuxer在看到README的情況下毋庸置疑的要看一下:
www.linuxidc.com @linuxidc:~/Public/lua-5.2.3$ cat README
This is Lua 5.2.3, released on 11 Nov 2013.
For installation instructions, license details, and
further information about Lua, see doc/readme.html.
這個README寫的很簡單,沒有我們預想的那樣寫了如何安裝或者如何使用等,但是它寫明了想要學習Lua的更多信息,查看doc/readme.html文件,所以…… chromium-browser doc/readme.html打開看看呗。不出所料,打開的網頁中有著About / Installing / Changes ...,所以我們略讀一遍就能知道如何安裝。
2. make linux (這裡make後跟著平台,我們當然要跟著linux咯)
不幸的是……報錯了:“ error:readline/readline.h:no such file or directory ”
之前的博客中,我寫過使用apt-file查詢這種缺失文件的方法,有興趣可以看看《cyclictest 測試以及原理淺談》一文,在其中有詳細的apt-file使用。
apt-file search readline | grep readline.h
可以很輕松地在結果中找到這條:
“ libreadline6-dev: /usr/include/readline/readline.h ”,所以apt-get安裝之(sudo apt-get install libreadline6-dev)!
安裝完成後,再使用 make linux 非常順利!
3. sudo make install
此時,Lua已經安裝完畢,我們可以使用這個神奇的腳本語言Lua了:
www.linuxidc.com @linuxidc:~/Public/lua-5.2.3$ lua
Lua 5.2.3 Copyright (C) 1994-2013 Lua.org, PUC-Rio
> print("Hello World")
Hello World
>
作為一個腳本語言,它當然也可以寫到腳本文件中運行:
www.linuxidc.com @linuxidc:/tmp/test$ cat hello.lua
#!/usr/local/bin/lua
print("Hello World")
www.linuxidc.com @linuxidc:/tmp/test$ lua hello.lua
Hello World
www.linuxidc.com @linuxidc:/tmp/test$ chmod +x hello.lua
www.linuxidc.com @linuxidc:/tmp/test$ ./hello.lua
Hello World
www.linuxidc.com @linuxidc:/tmp/test$
三、Lua 語言基礎
3.1 注釋
-- 兩個橫線開始單行注釋
--[[
加上兩個[和]表示
多行注釋。
--]]
3.2 變量類型
Lua是一種動態類型語言,因此語言中沒有類型的定義,不需要聲明變量類型,每個變量自己保存了類型。Lua有八種基本類型:
數值(number) 內部以double表示,Lua的數字只有double型,64bits,你不必擔心Lua處理浮點數會慢(除非大於100,000,000,000,000),或是會有精度問題
字符串(string) 總是以零結尾,但可以包含任意字符(包括零),因此並不等價於C字符串,而是其超集。字符串你可以用單引號,也可以用雙引號或者上面注釋時用到的[[ ]](類似於Python中的三引號,可以用於定義多行的字符串),還支持C類型的轉義,比如: ‘\a’ (響鈴), ‘\b’ (退格), ‘\f’ (表單), ‘\n’ (換行)>, ‘\r’ (回車), ‘\t’ (橫向制表), ‘\v’ (縱向制表), ‘\\’ (反斜槓), ‘\”‘ (雙引號), 以及 ‘\” (單引號)
布爾(boolean) 只有“true”或者“false”兩個值。數字0、''空字符串('\0')都是true!
函數(function) Lua的關鍵概念之一。不簡單等同於C的函數或函數指針。
表(table) 異構的Hash表。Lua的關鍵概念之一。
userdata 用戶(非腳本用戶)定義的C數據結構。腳本用戶只能使用它,不能定義。
線程(thread) Lua協作線程(coroutine),與一般操作系統的搶占式線程不一樣。
nil 代表什麼也沒有,可以與C的NULL作類比,但它不是空指針。你訪問一個沒有聲明過的變量,就是nil。例如 foo = anUnknownVariable 現在 foo = nil。 只有false和nil是false,其他的都是true,上面提到過包括0和空字符串在內都是true。
> print(type(nil))
nil
> print(type(99.9+12))
number
> print(type(true))
boolean
> print(type("Hello World"))
string
> print(type(print))
function
> print(type{test = "test"})
table
要注意的是:lua中的變量如果沒有特殊說明,全是全局變量,那怕是語句塊或是函數裡。變量前加local關鍵字的是局部變量。
theGlobalVar = 50
local theLocalVar = "local variable"
Lua 的詳細介紹:請點這裡
Lua 的下載地址:請點這裡