官术网_书友最值得收藏!

3.4 字符串

Lua可以高效地處理字符串,幾KB或者幾MB的長字符串也不會對效率造成影響,可以放心地使用字符串存儲大塊的數(shù)據(jù)。

定義

Lua的字符串形式非常靈活,單引號或者雙引號都可以,字符串里也允許使用轉(zhuǎn)義符:

print('openresty')               -- 單引號形式的字符串
print("It's OK")                 -- 雙引號形式的字符串,里面可以包含單引號
print("lua\tnginx")              -- 使用轉(zhuǎn)義字符\t

Lua還用“[[...]]”的形式支持raw string,括號內(nèi)的字符不會轉(zhuǎn)義,在寫正則表達(dá)式或者字符串里有引號、斜線的時候非常方便:

print([[raw string \r\n]])         -- 字符串里的\r\n等不會被轉(zhuǎn)義
print([[^\d+.\d+$]])               -- 直接是字符串的“原始形態(tài)”
print([["", '', ""]])              -- 引號無須轉(zhuǎn)義

與多行注釋類似,“[[...]]”的形式也支持在括號中間插入“=”,而且如果“[[”后面是一個換行,那么Lua會自動忽略這個換行,在書寫大量文字時是個非常方便的特性:

x = [=[                           -- 這里的換行符不會包含在字符串里
[[no \r\n, just one line]]        -- 但這里的換行符屬于字符串!
]=]                               -- 字符串定義結(jié)束,等號數(shù)量必須匹配

特點

Lua里的字符串更準(zhǔn)確地說應(yīng)該是“字節(jié)序列”,不僅可以包含可見字符,還能夠包含任意的二進(jìn)制數(shù)據(jù)。

Lua字符串的另外一個特點是只讀的,字符串對象一旦創(chuàng)建出來后就不能再做修改,如果要變動字符串(比如更改里面的某些字符)就只能用其他方式生成一個新的拷貝。

Lua語言在內(nèi)部使用一個全局散列表來管理所有的字符串,所以多個相同的字符串不會占用多份內(nèi)存,而且字符串的相等比較成本很低,不需要逐個檢查里面的字符,而是直接比較兩者的散列值。

主站蜘蛛池模板: 昭平县| 丹巴县| 镇赉县| 咸阳市| 吉林省| 松潘县| 乐山市| 长泰县| 禄劝| 银川市| 兰坪| 丹江口市| 喀喇| 临颍县| 泾阳县| 蒙山县| 石柱| 泰来县| 桑植县| 民勤县| 巴青县| 华亭县| 北川| 贡嘎县| 杨浦区| 崇仁县| 沁源县| 田东县| 广饶县| 南城县| 辰溪县| 麟游县| 永兴县| 万年县| 定襄县| 随州市| 东阿县| 邻水| 马龙县| 拜泉县| 伊春市|