1. 程式人生 > 其它 >lua 不支援中文字元_Programming in Lualua學習第3期 Lua表示式和語句

lua 不支援中文字元_Programming in Lualua學習第3期 Lua表示式和語句

技術標籤:lua 不支援中文字元

微信公眾號:GameToolDev
關注可瞭解更多的遊戲工具開發教程。問題或建議,請公眾號留言;

一、表示式: 1. 算術操作符: Lua支援常規算術操作符有:二元的“+”、“-”、“*”、“/”、“^”(指數)、“%”(取模),一元的“-”(負號)。所有這些操作符都可用於實數。然而需要特別說明的是取模操作符(%),Lua中對該操作符的定義為: a % b == a - floor(a / b) * b 由此可以推演出x % 1的結果為x的小數部分,而x - x % 1的結果則為x的整數部分。類似的,x - x % 0.01則是x精確到小數點後兩位的結果。 2. 關係操作符: Lua支援的關係操作符有:>、=、<=、==、~=,所有這些操作符的結果均為true或false。 操作符==用於相等性測試,操作符~=用於不等性測試。這兩個操作符可以應用於任意兩個值。如果兩個值的型別不同,Lua就認為他們不等。nil值與其自身相等。對於table、userdata和函式,Lua是通過引用進行比較的。也就是說,只有當他們引用同一個物件時,才視為相等。如:

1a={}
2a.x=1
3a.y=0
4b={}
5b.x=1
6b.y=1
7c=a

其結果是a == c,但a ~= b。 對於字串的比較,Lua是按照字元次序比較的。 3. 邏輯操作符: Lua支援的邏輯操作符有:and、or和not。與條件控制語句一樣,所有的邏輯操作符都將false和nil視為假,其他的結果均為真。和其他大多數語言一樣,Lua中的and和or都使用“短路原則”。在Lua中有一種慣用寫法"x = x or v",它等價於:if not x then x = v end。這裡還有一種基於“短路原則”的慣用寫法,如:max = (x > y) and x or y 這等價於C語言中max = (x > y) ? x : y。由於x和y均為數值,因此它們的結果將始終為true。 4. 字串連線: 前一篇Blog已經提到了字串連線操作符(..),這裡再給出一些簡單的示例。 /> lua > print("Hello " .. "World) Hello World > print(0 .. 1)--即使連線操作符的運算元為數值型別,在執行時Lua仍會將其自動轉換為字串。 015. table構造器: 構造器用於構建和初始化table的表示式。這是Lua特有的表示式,也是Lua中最有用、最通用的機制之一。其中最簡單的構造器是空構造器{},用於建立空table。我們通過構造器還可以初始化陣列,如:

1days={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
2fori=1,#daysdo
3print(days[i])
4end
5--輸出結果為
6--Sunday
7--Monday
8--Tuesday
9--Wednesday
10--Thursday
11--Friday
12--Saturday

從輸出結果可以看出,days在構造後會將自動初始化,其中days[1]被初始化為"Sunday",days[2]為"Monday",以此類推。 Lua中還提供了另外一種特殊的語法用於初始化記錄風格的table。如:a = { x = 10, y = 20 },其等價於:a = {}; a.x = 10; a.y = 20 在實際程式設計時我們也可以將這兩種初始化方式組合在一起使用,如:

polyline={color="blue",thickness=2,npoints=4,
{x=0,y=0},
{x=10,y=0},
{x=-10,y=1},
{x=0,y=1}}
print(polyline["color"]);
print(polyline[2].x)
print(polyline[4].y)
--輸出結果如下:
--blue
--10
--1

除了以上兩種構造初始化方式之外,Lua還提供另外一種更為通用的方式,如:

1opnames={["+"]="add",["-"]="sub",["*"]="mul",["/"]="div"}
2print(opnames["+"])
3i=20;s="-"
4a={[i+0]=s,[i+1]=s..s,[i+2]=s..s..s}
5print(a[22])

對於table的構造器,還有兩個需要了解的語法規則,如: a = { [1] = "red", [2] = "green", [3] = "blue", }
這裡需要注意最後一個元素的後面仍然可以保留逗號(,),這一點類似於C語言中的列舉。 a = {x = 10, y = 45; "one", "two", "three" } 可以看到上面的宣告中同時存在逗號(,)和分號(;)兩種元素分隔符,這種寫法在Lua中是允許的。我們通常會將分號(;)用於分隔不同初始化型別的元素,如上例中分號之前的初始化方式為記錄初始化方式,而後面則是陣列初始化方式。二、語句: 1. 賦值語句: Lua中的賦值語句和其它程式語言基本相同,唯一的差別是Lua支援“多重賦值”,如:a, b = 10, 2 * x,其等價於a = 10; b = 2 * x。然而需要說明的是,Lua在賦值之前需要先計算等號右邊的表示式,在每一個表示式都得到結果之後再進行賦值。因此,我們可以這樣寫變數互動:x,y = y,x。如果等號右側的表示式數量少於左側變數的數量,Lua會將左側多出的變數的值置為nil,如果相反,Lua將忽略右側多出的表示式。2. 區域性變數與塊: Lua中的區域性變數定義語法為:local i = 1,其中local關鍵字表示該變數為區域性變數。和全域性變數不同的是,區域性變數的作用範圍僅限於其所在的程式塊。Lua中的程式可以為控制結構的執行體、函式執行體或者是一個程式塊,如: 下面的x變數僅在while迴圈內有效。

1whilei<=xdo
2localx=i*2
3print(x)
4i=i+1
5end

如果是在互動模式下,當執行local x = 0之後,該變數x所在的程式即以結束,後面的Lua語句將被視為新的程式塊。如果想避免此類問題,我們可以顯式的宣告程式塊,這樣即便是在互動模式下,區域性變數仍然能保持其塊內有效性,如:

1do
2locala2=2*a
3locald=(b^2-4*a)^(1/2)
4x1=(-b+d)/a2
5x2=(-b-d)/a2
6end--a2和d的作用域至此結束。

和其它程式語言一樣,如果有可能儘量使用區域性變數,以免造成全域性環境的變數名汙染。同時由於區域性變數的有效期更短,這樣垃圾收集器可以及時對其進行清理,從而得到更多的可用記憶體。 3. 控制結構: Lua中提供的控制語句和其它大多數開發語言所提供的基本相同,因此這裡僅僅是進行簡單的列舉。然後再給出差異部分的詳細介紹。如: 1). if then else if a < 0 then b = 0 else b = 1 end 2). if elseif else then if a < 0 then b = 0 elseif a == 0 then b = 1 else b = 2 end 3). while local i= 1 while a[i] do print(a[i]) i = i + 1 end 4). repeat repeat line = io.read() until line ~= ""--直到until的條件為真時結束。 print(line) 5). for for var = begin, end, step do--如果沒有step變數,begin的預設步長為1。 i = i + 1 end 需要說明的是,for迴圈開始處的三個變數begin、end和step,如果它們使表示式的返回值,那麼該表示式將僅執行一次。再有就是不要在for的迴圈體內修改變數var的值,否則會導致不可預知的結果。 6). foreach for i, v in ipairs(a) do--ipairs是Lua自帶的系統函式,返回遍歷陣列的迭代器。 print(v) end for k in pairs(t) do --列印table t中的所有key。 print(k) end 見如下示例程式碼:

1days={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
2revDays={}
3fork,vinipairs(days)do
4revDays[v]=k
5end
6
7forkinpairs(revDays)do
8print(k.."="..revDays[k])
9end
10
11--輸出結果為:
12--Saturday=7
13--Tuesday=3
14--Wednesday=4
15--Friday=6
16--Sunday=1
17--Thursday=5
18--Monday=2

7). break 和C語言中的break語義完全相同,即跳出最內層迴圈。

版權申明:內容來源網路,版權歸原創者所有。除非無法確認,我們都會標明作者及出處,如有侵權煩請告知,我們會立即刪除並表示歉意。謝謝。

9738725a7da5bdd9a8daffad59e454b1.png

GameToolDev

ID:GameToolDev

www.GameToolDev.Com

遊戲工具開發丨Unity開發技術丨AI技能編輯器丨地圖編輯器

11fbdce5188689d9ebc1665f076d1a66.png