成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

Lua與其他程序語言語法不同之處是本文要介紹的內(nèi)容,主要是從LUA與其他程序語言的不同之處來學(xué)習(xí)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及其類型, 可以直接使用

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

  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 

支持為多個變量同時賦值

可使用以下的方法, 一一對應(yīng)賦值:

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

[ 非的邏輯運(yùn)算符是~而非! ]

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

^ 運(yùn)算符為冪運(yùn)算而非異或運(yùn)算

即:

  1. > print(13^2) 

將得到169.

字符串的操作

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

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

提供運(yùn)算符 ".." 用于連接字符串, 如:

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

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

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

此句出錯; Lua認(rèn)為字符串是'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長度類似, 使用"#"運(yùn)算符:

  1. > print(#"Hello")  

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

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

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

看這個語句:

  1. > print(true and 4)  

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

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

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

利用這樣的運(yùn)算特性, 可以在Lua內(nèi)達(dá)到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是邏輯表達(dá)式, b和c不會是表達(dá)式, 首先運(yùn)算a and b, 然后是(a and b) or c. 正常情況下, 若a為真, a and b會返回b, 如果b是一個字串或數(shù)值, 它就是'真', 因此b or c會直接返回b, 符合預(yù)期的"a為真, 返回b"的設(shè)計.

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

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

(參考: 有關(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)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助!

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

2021-03-09 16:38:48

加密貨幣比特幣貨幣

2010-03-10 10:58:12

python接口功能

2023-11-27 08:00:36

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

2011-08-25 10:15:02

Lua安裝函數(shù)

2010-04-26 17:24:56

Unix操作系統(tǒng)

2012-08-23 13:36:27

2012-08-31 11:21:12

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

2017-03-14 15:46:30

AndroidiOS不同之處

2009-12-15 18:47:56

Ruby框架OG

2010-01-08 14:35:24

VB.NET模塊

2009-08-20 10:39:00

Java與C#的不同之

2010-04-20 16:07:25

Oracle DRCP

2012-12-11 09:16:07

Go

2010-02-04 09:26:23

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

2010-04-08 11:11:16

Oracle查詢

2010-05-06 10:09:44

Oracle in

2010-09-27 10:43:35

無線路由器

2021-11-14 22:06:48

JavaPython方式

2014-08-14 17:11:51

LinuxWindows

2009-09-25 16:13:03

Hibernate 3Hibernate2.
點贊
收藏

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

主站蜘蛛池模板: 在线观看午夜视频 | 天天弄| 成人精品久久久 | 黄色一级毛片 | 精品福利在线 | 一色桃子av一区二区 | 啪啪免费网 | 国产精品视频一二三区 | 天堂久久天堂综合色 | 久久国产精品一区二区三区 | 成人免费在线小视频 | 久久精品久久久 | 狠狠伊人| 蜜桃av鲁一鲁一鲁一鲁 | 日本一二区视频 | 亚洲男人的天堂网站 | 91精品一区二区三区久久久久久 | 久操av在线 | 国产精品一区二区精品 | 久操伊人 | 丝袜美腿av | av毛片在线免费观看 | 久久久成| 日韩高清三区 | 国产一区二区三区久久久久久久久 | 精品久久ai电影 | 日韩国产在线 | 亚洲综合天堂 | 日韩精品在线观看一区二区 | 国产高潮好爽受不了了夜夜做 | 日韩一区二区三区在线播放 | 久久com | 欧美日韩国产一区二区 | 日日干日日操 | 国产精品嫩草影院精东 | 国产99久久久国产精品 | 中文字幕日韩av | 精品国产视频 | 日韩无 | 干干干操操操 | jizz在线看片 |