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

解析Lua與其他程序語(yǔ)言語(yǔ)法不同之處

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

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

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

以下語(yǔ)句是用C語(yǔ)言書寫的.

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

類似的行為在Lua中的語(yǔ)句是這樣的:

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

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

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

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

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

可以通過type語(yǔ)句取得類型, 如:

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

支持為多個(gè)變量同時(shí)賦值

可使用以下的方法, 一一對(duì)應(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除支持雙引號(hào)("")表示字符串外, 也支持用單引號(hào)('')或方括號(hào)([[]]), 以應(yīng)付不同的場(chǎng)合, 特別是當(dāng)字符串中包含有", ', ]時(shí):

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

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

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

或使用方括號(hào):

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

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

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

方括號(hào)還支援多行字符串。

字符串長(zhǎng)度的取法和C Shell取Table長(zhǎng)度類似, 使用"#"運(yùn)算符:

  1. > print(#"Hello")  

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

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

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

看這個(gè)語(yǔ)句:

  1. > print(true and 4)  

這個(gè)結(jié)果有別于其他語(yǔ)言, 比如C或者C++; 后者在同樣的情況下會(huì)輸出true(因?yàn)榉?值都被當(dāng)作真處理).

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

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

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

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

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

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

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

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

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

變量的作用范圍

Lua中可以手動(dòng)劃分代碼塊, 使用的是do-end語(yǔ)句:

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

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

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

責(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ù)庫(kù)查詢

2011-08-25 10:15:02

Lua安裝函數(shù)

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

2010-04-26 17:24:56

Unix操作系統(tǒng)

2012-08-23 13:36:27

2012-08-31 11:21:12

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

2017-03-14 15:46:30

AndroidiOS不同之處

2012-12-11 09:16:07

Go

2014-08-14 17:11:51

LinuxWindows

2009-09-25 16:13:03

Hibernate 3Hibernate2.

2023-08-10 17:23:10

LibreOfficOpenOffice

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

無線路由器
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 蜜桃视频在线观看免费视频网站www | 国产精品久久久久一区二区三区 | 欧美成人精品一区二区三区 | 免费一二区 | 九九精品在线 | 天天狠狠 | 久久国产综合 | 三级免费毛片 | 亚洲一区网站 | 日韩欧美三区 | 日韩午夜精品 | 精彩视频一区二区三区 | 久久精品国产亚洲一区二区三区 | 秋霞在线一区二区 | 欧美性高潮| 99久久精品免费看国产四区 | 精品一区免费 | www.日韩欧美| 亚洲人成人一区二区在线观看 | 久久大香| 欧美久久久久 | 欧美9999| 亚洲精品二区 | 久久伊人久久 | 日本小视频网站 | 欧美激情欧美激情在线五月 | 国产一区二区三区四区在线观看 | 99久久久久久久久 | 久久久久久国产精品免费免费 | 亚洲精品一区二 | 亚洲精品一二三 | 国产免费一区 | 日韩成人在线网址 | 亚洲在线 | 嫩草伊人| 久久蜜桃av一区二区天堂 | 麻豆国产一区二区三区四区 | 999久久久 | 91视频在线网站 | 久久九九免费 | 高清av电影|