Lua語言入門(一)

開篇

1、幾個連續(xù)語句之間不需要分割符,但也可以使用分號分割。 比如: a = 1 b = 2等價于a = 1; b= 2

2、lua解釋器對于大型程序塊處理不會有任何問題。

3、在交互模式中執(zhí)行代碼 或 將程序代碼保存到一個文件中再執(zhí)行,退出交互模式:調(diào)用os.exit(),或輸入 end of file控制符(windows上是ctrl + z, unix上是Ctrl + d)。

4、lua -i hello.lua :-i參數(shù),會讓先執(zhí)行hello中的代碼,然后進(jìn)入交互模式。

5、dofile(filename):加載程序庫(執(zhí)行文件中的代碼)

6、lua區(qū)分大小寫,名字和java語法相似。

7、lua的注釋,行注釋:--;多行注釋:--[[ 代碼 --]]

8、lua的全局變量:訪問一個未初始化的變量不會引發(fā)錯誤,訪問結(jié)果是一個特殊值 nil,刪除每個變量執(zhí)行將其賦值為nil

9、lua解釋器執(zhí)行程序:lua [選項參數(shù)] [腳本[參數(shù)]]

-e:可以直接在命令行輸入代碼
-l:加載庫文件
-i:運行完代碼,進(jìn)入交互模式


類型與值

10、lua有8中基礎(chǔ)類型:
nil(空):表示無效,

boolean(布爾):true or false;lua將false和nil視為假,0和空字符串視為真,

number(數(shù)字):實數(shù),lua沒有整數(shù)和浮點數(shù)之分,可以使用科學(xué)計算法、

string(字符串):lua字符串是不可變值,不能直接修改字符串中的某個字符,而應(yīng)該創(chuàng)建一個新的字符串,

a = "one string";
 b = string.gsub(a, "one", "anothor"); 

字符串可以使用單引號或雙引號;包含類型C語言的轉(zhuǎn)義;多行字符串([[ "" ]]):

page = [[
<html>
<head>
</head>
</html>
]];

字符串連接:.. ,例如

print(10 .. 20);

轉(zhuǎn)換字符串:tostring(10);
字符串長度:在字符串前面放置操作符“#”獲取字符串長度,

print(#str)

userdata(自定義類型):userdata用于表示一種由應(yīng)用程序或C創(chuàng)建的新類型,標(biāo)準(zhǔn)IO庫就用userdata表示文件的,可以將任意C數(shù)據(jù)存儲到lua變量中、

function(函數(shù)):可以存儲在變量中,可以通過參數(shù)傳遞給其它函數(shù),可以作為其它函數(shù)的返回值;lua所有的標(biāo)準(zhǔn)庫都是用C寫的,lua和C可以互調(diào)、

thread(線程):后面再講、

table(表):--[[
是一個關(guān)聯(lián)數(shù)組,“關(guān)聯(lián)數(shù)組”是一種具有特殊索引方式的數(shù)組;
大小可變;
lua通過table表示模塊、包、對象。io.read 表示 io模塊中的read函數(shù),而對于lua這表示使用字符串“read”作為key來索引table io;
table是對象,可以看做一個“匿名對象”,lua不會暗中產(chǎn)生table的副本或創(chuàng)建新的table,僅持有一個引用;
創(chuàng)建空table:a = {};最簡單的表達(dá)式就是“{}”;
table變量與table自身之間沒有固定的關(guān)聯(lián)性,屬性可以自由的加入和取出;添加或修改:a["x"] = 10; 刪除:a["x"] = nil;

--[[
a = {}
x = "y"
a[x] = 10
]]

a["y"] 等價于 a.y;a.y表示key為y來索引table;

表示數(shù)組和線性表:用整數(shù)作為key來使用table;自動生成的索引從1開始;
數(shù)組或線性表的長度獲?。骸?”操作符,和字符串用法一致,Lua將nil作為界定數(shù)組結(jié)尾的標(biāo)志,如果數(shù)組有中間含有nil時,操作符會認(rèn)為這些nil元素就是結(jié)尾標(biāo)志;
返回table的最大正索引數(shù):table.maxn;
]]

11、print(type(a)):打印變量類型。


表達(dá)式

12、算術(shù)操作符:和其它語言基本一致。

13、關(guān)系操作符:和其它語言唯一區(qū)別是“!=” 變成了 “~=”;table、userdata和函數(shù)都是做“引用比較”,只有當(dāng)它們引用引用同一個對象時,才認(rèn)為它們相等;除字符串和數(shù)字之外的其它類型只能相等或不等比較;不同類型之間大小比較直接導(dǎo)致錯誤;

14、邏輯操作符(and,or,not):與條件控制語句一致,所有邏輯操作符將false和nil視為假,其它任何東西視為真;操作符規(guī)則和其它語言一致;

15、操作符優(yōu)先級:“^”和“..”是右結(jié)合,其它都是左結(jié)合。

16、table的構(gòu)造:
空構(gòu)造:a = {}

構(gòu)造數(shù)組:a = {"1", "2", "3", "4", "5"}

a = {x = 10, y = 20}等價于 a = {}; a.x = 10; a.y = 20

添加屬性:a.x = 1,如果table a中有key為“x”的屬性,該語句為修改,如果沒有就會添加“x”到table中。(有點像JavaScript那么隨意)

刪除屬性:a.x = nil
初始化方式嵌套:

a = {name = "android", {x = 1, y = 2}, {x = 3, y = 4}}

訪問:

a.name   ---> android
a["name"]    ---> android
a[1]     ---> 1

table可以在最后一個元素后面寫一個逗號;可以用“;”“,”分隔元素

{x = 1,  y = 2, "x"; "y", }

語句

17、多重賦值:

a, b, c = 1, 2
x, y = y, x

若值的個數(shù)少于變量個數(shù),那么多余的變量會被賦為nil;若值的個數(shù)更多的話,那么多余的值會被直接丟棄掉;

18、局部變量:local修飾變量, 例:local a = 1;

19、顯示的定義一個程序塊:使用關(guān)鍵字:do - end

do
   local a = 1
   local d = a*2
   c = a+b
end

20、控制語句,lua不支持switch語句
if - elseif - else - end

if a>0 then
 a=1
end
if a>0 then
 a = 1
else
 a = -1
end
if a>0 then
 a = 1
elseif a == 0 then
 a = -1
else
 a = 0
end

while

local i = 1
while a[i] do
 print(a[i])
 i = i+1
end

repeat - until

repeat
 line = io.read()
until line ~= ""
local sqr = x/2
repeat
 sqr = (sqr + x/sqr)/2
 local  error = math.abs(sqr^2 - x)
until error < x/10000 --在這里還能訪問循環(huán)體中的局部變量

21、for

for i=exp1,exp2,exp3 do
 print(i)
end

表示 i 從exp1變化到exp2,每次都以exp3作為步長遞增,exp3可缺省則默認(rèn)為1,并執(zhí)行一個“執(zhí)行體”。
exp1,exp2,exp3都是在循環(huán)開始前一次性求值,只會執(zhí)行一次;控制變量 i 會被自動什么為for語句的局部變量,僅在循環(huán)體內(nèi)可見。

22、泛型for

for i,v in ipairs(table_name) do
 print(i,v)
end

迭代器ipairs,用于遍歷數(shù)組的迭代器函數(shù),每次在循環(huán)中,i 會被賦予一個索引值,同時 v 被賦予對應(yīng)的元素值。

23、break 與 return
break:結(jié)束當(dāng)前循環(huán)
return:結(jié)束當(dāng)前程序塊,只能放在end、else、until前一條,其它地方要么不起作用,要么報錯。

function fun()
   return --這里不起作用

   do
   return --這樣就可以不執(zhí)行函數(shù)后面的語句,直接跳出函數(shù)了
   end

   print("hello lua")
end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,321評論 0 17
  • Nginx API for Lua Introduction ngx.arg ngx.var.VARIABLE C...
    吃瓜的東閱讀 6,062評論 0 5
  • 第一篇 語言 第0章 序言 Lua僅讓你用少量的代碼解決關(guān)鍵問題。 Lua所提供的機(jī)制是C不擅長的:高級語言,動態(tài)...
    testfor閱讀 2,936評論 1 7
  • 清真菜在當(dāng)下這個多元文化交流碰撞的時代已經(jīng)不足為奇,但是這家“寧味夏語”清真店卻在眾多同類店面中獨樹一幟,究竟是什...
    北京頭牌閱讀 340評論 0 0
  • 車票漲價了 從前五塊錢 現(xiàn)在八塊五 從前的路兩邊 掛滿了酒葡萄 紅的發(fā)紫 從前的我 是個假小子 地頭的破布帳篷 還...
    陳舊啊閱讀 258評論 5 2

友情鏈接更多精彩內(nèi)容