Lua中相同的字符串在比较时会被反映为不相等

我在Lua中有以下函数。

function tempchange(m1)
if type(m1) ~="string" then  return  m1 end
    for w in string.gmatch(m1, "%d%+%d*i") do
        words[#words+1]=w
      end
    for i = 1, #words do
        words[i]=string.gsub(words[i],"+","uuu")
    end
m1=string.gsub(m1,"+","uuu")
for i = 1, #words do
m1=string.gsub(m1,words[i],'"'..words[i]..'"')
end
m1=string.gsub(m1,"uuu","+")
return m1
end

字符串m和n定义为

m = '{{1,2,3},{4,5,6},{7,8,"9+i"}}'
n = '{{1,2,3},{4,5,6},{7,8,9+i}}'

我期望字符串 mtempchange(n) 相同。实际上,我进行了以下检查。

print(m)
print(tempchange(n))
print(type(m))
print(type(tempchange(n)))
print(m==tempchange(n))

输出结果为

{{1,2,3},{4,5,6},{7,8,"9+i"}}
{{1,2,3},{4,5,6},{7,8,"9+i"}}
string
string
false

因此,即使字符串 mtempchange(n) 都是字符串类型并且看起来相同,但在比较它们时,我们得到了false。这意味着它们是不同的。为什么会这样呢?我是Lua的新手,正试图学习它。任何帮助都将不胜感激。谢谢。

点赞
用户4403144
用户4403144

问题在于每次调用tempchange函数时,你都没有重新初始化words表。要解决这个问题,在你的tempchange函数开头添加这一行代码:

local words = {}

如果你继续按照现在的方式调用tempchange(在你上面的打印语句中调用了3次),你将不断地向words表中添加内容。这意味着在以下for循环中:

for i = 1, #words do
    m1 = string.gsub(m1,words[i],'"'..words[i]..'"')
end

……你会不断添加更多的引号。

你只需要在每次调用该函数时使用一个新的words表即可。

此外,我今天早些时候对你的问题有所误解。对此我深表歉意。

2019-07-28 01:50:55