在Lua中嵌套括号有什么意义?

时间:2014-01-21 00:05:45

标签: string lua

我正在教自己Lua进行iOS游戏开发,因为我听说过很多非常好的事情。我对这种语言的文档水平印象非常深刻,这使得学习它变得更加容易。

我的问题是我发现了一个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中使用的语法有什么意义?当作为string_1的输入给出时,它给出与string_2print()相同的结果,所以我不明白为什么嵌套括号甚至存在。有人可以帮助一个菜鸟(我)获得一些观点吗?

2 个答案:

答案 0 :(得分:13)

如果您的字符串包含一个等于分隔符的子字符串,则会使用它。例如,以下内容无效:

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

因此,为了使其按预期工作,您需要使用不同的字符串分隔符,如下所示:

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

我认为可以说很多字符串文字都不包含子字符串]],在这种情况下,可能永远不会有理由使用上述语法。

答案 1 :(得分: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