2014-01-21 58 views
8

我目前在教我自己Lua的iOS遊戲開發,因爲我聽說過很多關於它的很好的東西。我對語言的文檔水平印象深刻,這使得學習變得更容易。Lua中的嵌套括號有什麼意義?

我的問題是,我發現了一個似乎沒有「初學者」解釋的Lua概念:引號的嵌套括號。例如,我被教導說,長字符串與轉義單引號和雙引號像下面這樣:

string_1 = "This is an \"escaped\" word and \"here\'s\" another." 

也可以不包圍引號的整體寫入。相反,人們可以簡單地用雙括號替換它們,如下所示:

string_2 = [[This is an "escaped" word and "here's" another.]] 

這些對我來說都完全有意義。但我也可以寫爲「嵌套括號」,其中包含了全部的雙括號之間等號string_2行,如下所示:

string_3 = [===[This is an "escaped" word and "here's" another.]===] 

我的問題很簡單。 string_3中使用的語法有什麼意義?當作爲print()的輸入給出時,它給出與string_1string_2相同的結果,所以我不明白爲什麼嵌套括號甚至存在。有人可以幫助一個noob(我)獲得一些觀點嗎?

回答

11

如果您的字符串包含等於分隔符的子字符串,則會使用它。例如,下面將是無效的:

string_2 = [[This is an "escaped" word, the characters ]].]] 

因此,爲了按預期工作,你就需要在以下使用不同的字符串分隔符,如:

string_3 = [===[This is an "escaped" word, the characters ]].]===] 

我認爲可以肯定地說,並不是很多字符串文字都包含子字符]],在這種情況下,可能永遠不會有使用上述語法的理由。

+0

所以,所有的嵌套的括號做的是使容器「標籤「不同於字符串?這樣,'string_3'會輸出以下內容: – elersong

+0

這是一個「轉義」字,字符]]。 – elersong

+0

這是正確的嗎? – elersong

1

它幫助,好了,窩他們:

print [==[malucart[[bbbb]]]bbbb]==] 

會打印:

malucart[[bbbb]]]bbbb 

但如果這沒有用的話,你可以用它們來把整個程序中的字符串:

loadstring([===[print "o m g"]===])() 

會打印:

o m g 

我個人將它們用於我的靜態/動態庫實現。在這種情況下,你不知道,如果該程序具有相同量= S一個右括號,你應該是這樣確定的:

local c = 0 
while contains(prog, "]" .. string.rep("=", c) .. "]") do 
    c = c + 1 
end 
-- do stuff