我正在教自己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_2
和print()
相同的结果,所以我不明白为什么嵌套括号甚至存在。有人可以帮助一个菜鸟(我)获得一些观点吗?
答案 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