自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

解析Lua與其他程序語言語法不同之處

移動開發(fā) iOS
Lua與其他程序語言語法不同之處是本文要介紹的內(nèi)容,主要是從LUA與其他程序語言的不同之處來學習LUA腳本語言的使用,具體內(nèi)容來看本文詳解。

Lua與其他程序語言語法不同之處是本文要介紹的內(nèi)容,主要是從LUA與其他程序語言的不同之處來學習LUA腳本語言的使用,具體內(nèi)容來看本文詳解。

變量無需聲明類型(variable type), 無需在首次使用前聲明

以下語句是用C語言書寫的.

  1. int i;  
  2. i = 9;  
  3. printf("%d\n",i); 

類似的行為在Lua中的語句是這樣的:

  1. > i = 9 
  2. > print(i)  

不需要事先聲明i及其類型, 可以直接使用

此外, 變量的類型也不是固定的, 是由其當前值決定的. 可以隨時賦不同類型的值給同一個變量.

  1. > i = 9 
  2. > print(i)  
  3. 9  
  4. > i = "Hello Azeroth!" 
  5. > print(i)  
  6. Hello Azeroth! 

不過, 雖然使用時不需要指明, 但變量類型是存在的, 包括: number, string, Boolean, function, table, nil, thread, userdata

可以通過type語句取得類型, 如:

  1. > print(type("Hello Azeroth!"))  
  2. string 

支持為多個變量同時賦值

可使用以下的方法, 一一對應賦值:

  1. > x, y = 3, 5  
  2. > print(x * y)  
  3. 15 

[ 非的邏輯運算符是~而非! ]

  1. > print(1 ~= 3)  
  2. true 

^ 運算符為冪運算而非異或運算

即:

  1. > print(13^2) 

將得到169.

字符串的操作

可以很方便地使用tostring() / tonumber()函數(shù)進行字符串與數(shù)字類型的轉(zhuǎn)換, 支持科學記數(shù)法.

  1. > x = tonumber("1e3")  
  2. > print(x)  
  3. 1000 

提供運算符 ".." 用于連接字符串, 如:

  1. > x = "a" .. "b"  
  2. > print(x)  
  3. ab 

Lua除支持雙引號("")表示字符串外, 也支持用單引號('')或方括號([[]]), 以應付不同的場合, 特別是當字符串中包含有", ', ]時:

  1. > x = 'Hello' 
  2. > print(x)  
  3. Hello  
  4. > x = 'Isn't it nice?'  
  5. stdin:1: '=' expected near 'it' 

此句出錯; Lua認為字符串是'Isn', 從而無法解讀后面的部分; 一種解法是使用轉(zhuǎn)義符. Lua和其他語言一樣支持轉(zhuǎn)義符:

  1. > x = 'Isn\'t it nice?'  
  2. > print(x)  
  3. Isn't it nice? 

或使用方括號:

  1. > x = [[This is a long string including ' and "]]   
  2. > print(x)  
  3. This is a long stirng including ' and " 

方括號的配對規(guī)則是: [==..=[ 字符串內(nèi)容 ]==..=], 在[ [之間可以沒有等號(上面的情形), 或者有任意數(shù)量的等號, 配對時將尋找包含相同數(shù)量等號的] ]. 例如, 可以用下面的方式在字符串中包含]]:

  1. > x = [==[This is a long string including ', ]] and "]==]  
  2. > print(x)  
  3. This is a long string including ', ]] and " 

方括號還支援多行字符串。

字符串長度的取法和C Shell取Table長度類似, 使用"#"運算符:

  1. > print(#"Hello")  

或者用函數(shù)string.len():

  1. > x = "Hello" 
  2. > print(string.len(x))  

邏輯運算的特殊現(xiàn)象

看這個語句:

  1. > print(true and 4)  

這個結(jié)果有別于其他語言, 比如C或者C++; 后者在同樣的情況下會輸出true(因為非0值都被當作真處理).

先來看這個問題: 在普通的邏輯表達式A and B中, 明顯的, 如果第一個, 也就是A為真, 那么表達式的值是由B決定的; 即是說, A and B, 若A為真, 那么B真則表達式A and B為真, B假則表達式A and B為假.

所以Lua做出這樣處理的依據(jù)是: true and 4是一個邏輯與(A and B)的表達式, 由于第一個的值為真, 表達式的值是其實是由第二個決定的; 換言之, 只要直接返回第二個表達式的值就行了. Lua的推廣是, 第二個表達式即使不產(chǎn)生true或false的布爾值, 也可以被返回.

利用這樣的運算特性, 可以在Lua內(nèi)達到C/C++中a ? b : c語句的效果:

  1. > print(true and "Hello" or "Azeroth!")  
  2. Hello  
  3. > print(false and "Hello" or "Azeroth!")  
  4. Azeroth 

換言之,C/C++中的"a ? b : c"語句在Lua中可以寫為a and b or c.

但是這個寫法是有缺陷的. 在a and b or c中, 通常a是邏輯表達式, b和c不會是表達式, 首先運算a and b, 然后是(a and b) or c. 正常情況下, 若a為真, a and b會返回b, 如果b是一個字串或數(shù)值, 它就是'真', 因此b or c會直接返回b, 符合預期的"a為真, 返回b"的設計.

但如果b是一個變量, 而該變量恰好為空(如尚未定義)時, b為假, b or c就會返回c. 此時產(chǎn)生了"a為真, 但返回c"的情況.

因此為了使表達式a and b or c正常工作, 必須保證b為真. 在不能保證b為真的情況下, 只有用if-else語句才能保證邏輯嚴密性.

(參考: 有關(guān)lua中"(a and b) or c"與C中"a?b:c"等同的條件, by carl2500 from CWDG)

變量的作用范圍

Lua中可以手動劃分代碼塊, 使用的是do-end語句:

  1. > do  
  2. >> local i = 10 
  3. >> print(i)  
  4. >> end  
  5. 10  
  6. > print(i)  
  7. nil 

和其它的程序語言使用{ }的區(qū)別不大.

小結(jié):解析Lua與其他程序語言語法不同之處的內(nèi)容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2021-03-09 16:38:48

加密貨幣比特幣貨幣

2011-08-25 10:15:02

Lua安裝函數(shù)

2010-03-10 10:58:12

python接口功能

2023-11-27 08:00:36

開發(fā)數(shù)據(jù)庫查詢

2009-08-20 10:39:00

Java與C#的不同之

2009-12-15 18:47:56

Ruby框架OG

2010-01-08 14:35:24

VB.NET模塊

2010-04-20 16:07:25

Oracle DRCP

2012-08-31 11:21:12

云計算大數(shù)據(jù)

2012-08-23 13:36:27

2017-03-14 15:46:30

AndroidiOS不同之處

2010-04-26 17:24:56

Unix操作系統(tǒng)

2012-12-11 09:16:07

Go

2009-09-25 16:13:03

Hibernate 3Hibernate2.

2014-08-14 17:11:51

LinuxWindows

2023-08-10 17:23:10

LibreOfficOpenOffice

2010-04-08 11:11:16

Oracle查詢

2010-05-06 10:09:44

Oracle in

2010-02-04 09:26:23

C++模板函數(shù)重載

2010-09-27 10:43:35

無線路由器
點贊
收藏

51CTO技術(shù)棧公眾號