Strings
指字符的序列。 lua是8位字節,所以字符串可以包含任何數值字符,包括嵌入的0。這意味著你可以存儲任意的二進制數據在一個字符串裡。 Lua中字符串是不可以修改的,你可以創建一個新的變量存放你要的字符串
a = "one string"
string和其他對像一樣,Lua自動進行內存分配和釋放,一個string可以只包含一個字母也可以包含一本書,Lua可以高效的處理長字符串,1M的string在Lua中是很常見的。可以使用單引號或者雙引號表示字符串
a = "a line"
b = "another line"
為了風格統一,最好使用一種,除非兩種引號嵌套情況。對於字符串中含有引號的情況還可以使用轉義符來表示。 Lua中的轉義序列有:
a bell
back space -- 後退
f form feed -- 換頁
newline -- 換行
carriage return -- 回車
horizontal tab -- 製表
v vertical tab
backslash -- ""
" double quote -- 雙引號
" single quote -- 單引號
[ left square bracket -- 左中括號
] right square bracket -- 右中括號
運行時,Lua會自動在string和numbers之間自動進行類型轉換,當一個字符串使用算術操作符時,string就會被轉成數字。
print("10" + 1) --> 11
print("10 + 1") --> 10 + 1
print("-5.3e - 10" * "2") --> -1.06e-09
print("hello" + 1) -- ERROR (cannot convert "hello")
反過來,當Lua期望一個string而碰到數字時,會將數字轉成string。
print(10 .. 20) --> 1020
儘管字符串和數字可以自動轉換,但兩者是不同的,像10 == "10"這樣的比較永遠都是錯的。如果需要顯式將string轉成數字可以使用函數tonumber(),如果string不是正確的數字該函數將返回nil。
line = io.read() -- read a line
n = tonumber(line) -- try to convert it to a number
if n == nil then
error(line .. " is not a valid number")
else
print(n*2)
end
反之,可以調用tostring()將數字轉成字符串,這種轉換一直有效:
print(tostring(10) == "10") --> true
print(10 .. "" == "10") --> true