- OpenResty完全開發(fā)指南:構(gòu)建百萬級別并發(fā)的Web應(yīng)用
- 羅劍鋒
- 558字
- 2019-07-25 11:55:08
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)存,而且字符串的相等比較成本很低,不需要逐個檢查里面的字符,而是直接比較兩者的散列值。
推薦閱讀
- C#高級編程(第10版) C# 6 & .NET Core 1.0 (.NET開發(fā)經(jīng)典名著)
- Delphi程序設(shè)計基礎(chǔ):教程、實驗、習(xí)題
- 數(shù)據(jù)庫系統(tǒng)原理及MySQL應(yīng)用教程
- Getting Started with NativeScript
- 高級語言程序設(shè)計(C語言版):基于計算思維能力培養(yǎng)
- 從Excel到Python:用Python輕松處理Excel數(shù)據(jù)(第2版)
- MongoDB,Express,Angular,and Node.js Fundamentals
- Go語言從入門到精通
- Python 3 Object:oriented Programming(Second Edition)
- 征服C指針(第2版)
- iOS Development with Xamarin Cookbook
- Java Web開發(fā)任務(wù)教程
- Test-Driven Java Development(Second Edition)
- WordPress Responsive Theme Design
- 軟件測試實用教程