lua是一款小巧的腳本語言,是巴西里約熱內(nèi)盧天主教大學(xué)里的一個(gè)研究小組于1993年開發(fā)其設(shè)計(jì)目的是為了嵌入應(yīng)用程序中,從而為應(yīng)用程序提供靈活的擴(kuò)展和定制功能。lua由標(biāo)準(zhǔn)C編寫而成,幾乎在所有操作系統(tǒng)和平臺(tái)上都可以編譯、運(yùn)行。lua并沒有提供強(qiáng)大的庫,這是由它的定位決定的,所以lua不適合作為開發(fā)獨(dú)立應(yīng)用程序的語言,在游戲開發(fā)等領(lǐng)域使用較多。
公司主營業(yè)務(wù):做網(wǎng)站、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出清河門免費(fèi)做網(wǎng)站回饋大家。
保留字的概念不用多說,lua
中的保留字如下21個(gè):
and break do else elseif end false for function if in local nil not or repeat return then true until while
注釋分為行注釋和塊注釋:
-- 行注釋 -- print("the line notes") -- 塊注釋 --[[ print("the first block notes") print("the second block notes") ]]
使用塊注釋時(shí),建議用如下形式:
--[[ print("the first block notes") print("the second block notes") --]]
這種形式的好處是,如果想要取消塊注釋,只需在塊注釋開始前再加一個(gè)-
符號(hào),如此可以將塊注釋的開始行和結(jié)束行都變?yōu)樾凶⑨專?/p>
---[[ print("the first block notes") print("the second block notes") --]]
這里還要提到的一點(diǎn)是,如果在被注釋的內(nèi)容中出現(xiàn)]]
的解決方法。在lua
5.1版本后,可以通過在兩個(gè)相連的中括號(hào)間添加相等數(shù)量的=
來解決,如此便可在注釋內(nèi)容中使用]]
:
--[===[ print("the first block notes") print("the second block notes") [[ ]] --]===]
和shell
,python
一樣,在lua
中也有shebang,放于.lua
文件的第一行,如果改文件有執(zhí)行權(quán)限,則可以直接執(zhí)行:
#!/bin/bash #!/usr/bin/env lua
lua
中共有8種基礎(chǔ)類型:
nil boolean number string userdata function thread table
nil即為空,相當(dāng)于python
中的None和JavaScript
中的undefined/null,比較簡(jiǎn)單;userdata為自定義變量,thread與多線程、并發(fā)有關(guān),這兩種變量不必在初學(xué)階段做過多糾結(jié),下面我們主要看看number,boolean,string,table和function。
內(nèi)置的type()
函數(shù)可以返回變量或值的類型:
print(type(nil)) --nil print(type(true)) --boolean print(type(12.2)) --number print(type("hello")) --string print(type(print)) --function print(type(type(nil))) --string 此處無論type中的是何值,print出的都是string,因?yàn)閠ype()的返回值是string類型
lua
中沒有像C/C++/Java中的整型(int/Integer),所有的數(shù)字均為雙精度浮點(diǎn)數(shù)(double/Double)。在lua
中可以使用科學(xué)計(jì)數(shù)法表示數(shù)字常量,下面幾種寫法都是允許的:
4 3.1 6.6e+5 2.5e-3
lua
中的boolean值和python
和JavaScript
中的boolean有些區(qū)別。在python
和JavaScript
中,None/null,空字符串和數(shù)字0在邏輯判斷中都會(huì)轉(zhuǎn)換為false,而在lua
中,空字符串和數(shù)字0在邏輯判斷中都會(huì)轉(zhuǎn)換為true,只有nil在邏輯判斷中都會(huì)轉(zhuǎn)換為false:
if "" and 0 then print(true) else print(false) end --[[ 輸出結(jié)果為true --]]
lua
中的字符串是不可變量,這和python
中相同,與C/C++/Java中不同。與python
和JavaScript
一樣,lua
中既可以使用單引號(hào)'
,也可以使用雙引號(hào)"
來聲明字符串:
stringA = "This is string A" stringB = 'The string B'
lua
中也有轉(zhuǎn)義字符,如定義一個(gè)分為兩行的字符串:
stringTwoLine = "This is the first line.\nThe second line."
在lua
中,可以使用一對(duì)匹配的` `
來界定一個(gè)字符串,如果此時(shí)該字符串的第一個(gè)字符是換行符,該換行符將會(huì)被lua
忽略,此外在該字符串中所有的轉(zhuǎn)義字符如\n
\t
等都會(huì)被忽略,即所有的轉(zhuǎn)義字符在` `
內(nèi)失效。該用法通常用來書寫含有代碼的字符串:
indexPage = [[HTML Title Hello World]] print(indexPage)
與其他大多數(shù)編程語言不同,lua
中不能使用+
來連接字符串,而要用..
來進(jìn)行連接:
> print("hello" + " world") stdin:1: attempt to perform arithmetic on a string value stack traceback: stdin:1: in main chunk [C]: ? > print("hello".." world") -- 輸出結(jié)果hello world
lua
中計(jì)算字符串長度有些新奇,這里對(duì)比python
和JavaScript
來看一下,方便加深印象:
len('helloworld') # python 'helloworld'.length // JavaScript #'helloworld' -- lua
lua
中有兩個(gè)內(nèi)置函數(shù)tonumber()
、tostring()
用于將string轉(zhuǎn)換為number及將number轉(zhuǎn)換為string,在轉(zhuǎn)換失敗時(shí)不會(huì)拋出異常,而是將其轉(zhuǎn)換為nil:
tonumber('1.173') -- 1.173 tonumber('hello') -- nil tostring(3.14159) -- '3.14159'
table是lua
中僅有的數(shù)據(jù)結(jié)構(gòu)機(jī)制。table非常類似于python
中的dict,只要hashable的值均可作為key的,可以簡(jiǎn)單的認(rèn)為string和number均可作為key,如:
dataTable, newTable = {}, {} -- 初始化table dataTable["name"] = "jiagoushi" -- 賦值,key="name",value="jiagoushi" print(dataTable["name"]) -- 取值,值為"jiagoushi" print(dataTable.name) -- 另一種取值方式,值為"jiagoushi" dataTable[1] = 233 print(dataTable[1]) -- 取值,值為233 dataTable[2.2] = "Beijing" print(dataTable[2.2]) -- 取值,值為"Beijing" print("dataTable的長度為 " .. #dataTable) -- 與取string長度相同,#也可以用來取table的長度 for i = 1, 10 do newTable[i] = i * 2 end for j = 1, #newTable do -- 循環(huán)輸出該table中的值 print("newTable[" .. j .. "] = " .. newTable[j]) end
關(guān)于lua
中table的key值,如果使用整數(shù)的話,通常會(huì)以1作為起始值,這點(diǎn)與絕大多數(shù)編程語言習(xí)慣從0開始不同,因?yàn)?code>lua中有不少機(jī)制依賴該慣例,因此應(yīng)該多加注意。
與python
和JavaScript
相同,在lua
中,函數(shù)被視為第一類值,可以被自由傳遞。看一下函數(shù)的基本用法:
-- 函數(shù)定義,有一個(gè)形參name function sayHello(name) print("Hello, " .. name) end -- 函數(shù)調(diào)用 sayHello("Li Lei") -- "Hello, Li Lei" sayHello("Han Meimei") -- "Hello, Han Meimei"
有關(guān)函數(shù)的高階內(nèi)容,放到之后的博客中繼續(xù)講解,敬請(qǐng)關(guān)注。
完。