Lua學習筆記(二):基本文法

來源:互聯網
上載者:User

標籤:

Lua學習指南:http://www.lua.org/manual/

首先我們要明確的一點是:在Lua中,除了關鍵字外一切都是變數。

Lua關鍵字

可以查看這個地址:http://www.lua.org/manual/5.1/manual.html#2.1

關於分號

語句的最後可以用分號";"表示結束,也可以不寫。

而對於一行有多個語句的情況下,語句之間可以用分號";"隔開,也可以用空白隔開。一般來說,建議總是用分號隔開。

使用注釋

單行注釋使用“--”即可,以後的內容都會被當做注釋;

多行注釋以“--[[”開始,以“]]”結束。

變數聲明

由於是動態類型,所以變數聲明時不需要宣告類型,但是一定要進行賦值,如果希望是空類型,可以賦值nil,如下:

1 num = 100--數字1002 str = "abc"--字串abc3 obj = nil--空類型

注意在Lua中所有的變數和關鍵字都是大小寫敏感的。

賦值

可以一次對多個變數賦值,規則:如果等號(“=”)右邊多了,則捨棄,左邊多了,則賦值為空白(nil) 。

運算式 a,b=b,a表示a和b的值交換,類型不一樣照樣可以交換。

1 a, b, c = 100, "abc"2 print(a, b, c)--100 abc nil3 4 a, b = b, a5 print(a, b, c)--abc 100 nil
類型

我們看看Lua內建的基礎資料型別 (Elementary Data Type)都有哪些:

  • nil:表示變數還沒有被賦值,可以看做刪除該變數的意思;
  • Boolean:布爾類型,true和false;
  • number:數字類型,內部以double表示;
  • string:字串,總是以零結尾,但可以包含任一字元(包括零),因此並不等價於C字串,而是其超集;
  • table:表,實際是一個關聯陣列,索引可以使用數字或字串,不同於其他語言的數組把0作為數組的初始索引,在Lua裡表的預設初始索引一般以1開始。table的變數只是一個地址引用,對table的操作不會產生table的副本或建立新的table,table不會固定長度大小,有新資料添加時table長度會自動成長,沒初始的table都是nil;
  • function:函數,可以作為匿名函數來使用;
  • userdata:使用者(非指令碼使用者)定義的C資料結構,指令碼使用者只能使用它,不能定義;
  • thread:Lua協作線程(coroutine),與一般作業系統的搶佔式線程不一樣;

接下來的筆記會著重介紹這些核心的基礎資料型別 (Elementary Data Type)。

而判斷變數究竟是什麼類型依靠的是他的值,我們看看下面的例子:

 1 num = 100 2 str = "abc" 3 obj = nil 4 func = print 5  6 print(type(num))--number 7 print(type(str))--string 8 print(type(obj))--nil 9 print(type(func))--function10 11 func = str12 13 print(type(func))--string
全域和局部

預設聲明的變數都是全域變數,表示可以在全域範圍內進行訪問,而局部變數則是在聲明之前添加local關鍵字,如下:

1 local num2 local str = "abc"3 4 print(num)--nil5 print(str)--abc

全域變數聲明時必須賦值,而局部變數則不需要。

塊

do...end可以聲明一個程式塊,局部變數的生命週期在自己的程式塊和子程式塊中:

 1 function main() 2   do 3     local num = 100 4     print(1, num)--1  100 5     do 6       print(2, num)--2  100 7     end 8   end 9   print(3, num)--3  nil10 end11 12 main()
運算子算術運算子

包含“+”、“-”、“*”、“/”、“%”等運算子,但是要注意不支援自增自減運算子:

1 num = 102 --下面的寫法都不支援, --直接變注釋了都3 num++4 ++num5 num--6 --num7 --正確的寫法如下8 num = num + 19 num = num - 1

同時簡寫的形式也不支援:

1 num = 102 --簡寫是不支援的3 num *= 54 --正確的寫法如下5 num = num * 5

取餘運算支援小數,因為number類型是以double形式存在的:

1 num = 3.142 num = num % 13 print(num)--0.14
關係運算子
  • ==:判斷是否相等;
  • ~=:判斷是否不相等;
  • <:判斷是否小於;
  • >:判斷是否大於;
  • <=:判斷是否小於等於;
  • >=:判斷是否大於等於;

需要注意的是,table等參考型別是使用地址來進行判斷的:

 1 num1 = 10 2 num2 = 10 3 print(num1 == num2)--true 4  5 str1 = "abc" 6 str2 = "abc" 7 print(str1 == str2)--true 8  9 table1 = {1, 2, 3}10 table2 = {1, 2, 3}11 print(table1 == table2)--false
邏輯運算子
  • and:與,等同C裡的&&;
  • or:或,等同C裡的||;
  • not:非,等同C裡的!;

我們可以巧用邏輯運算子來實現C中的三元運算子:

1 --C 語言的寫法2 --d = a ? b : c3 --Lua 的寫法4 d = (a and b) or c
控制結構if then

條件判斷語句,我們直接上個例子:

 1 num = math.random() 2 print(num) 3  4 if num <= 0.33 then 5   print("A") 6 elseif num <= 0.66 then 7   print("B") 8 else 9   print("C")10 end
while和repeat

條件迴圈語句,while是先判斷再迴圈,repeat是先迴圈再判斷,例子如下:

 1 num = 10 2  3 --while 的條件是如果為真則繼續迴圈 4 while num ~= 0 do 5   num = num - 1 6   print(num) 7 end 8  9 num = 1010 11 --repeat 的條件是如果為真則退出迴圈12 repeat13   num = num - 114   print(num)15 until num == 0
for

迴圈語句;

1 --步長預設為 12 for i = 0, 10 do3   print(i)4 end5 6 --指定步長為 27 for i = 0, 10, 2 do8   print(i)9 end
foreach

迭代遍曆語句,寫法如下:

1 days = {"Suanday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}2 3 --i 表示索引, v 表示值4 for i,v in ipairs(days) do5   print(i, v)6 end
break和return

用法和C中的一致,break用於跳出迴圈,而return用於跳出函數。

不支援的switch、case和continue

Lua中不支援switch-case語句,我們可以使用if elseif來代替;

Lua中不支援continue語句,參考下面的檔案來實現:http://www.jb51.net/article/59099.htm

Lua在5.2的版本中加入了goto語句,可以用來實現continue的效果。

Lua學習筆記(二):基本文法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.