看起来相同的字符串在 lua 中反映为不相等

Strings that appear same are reflected as unequal in 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 的新手,正在尝试学习它。任何帮助将不胜感激。谢谢。

问题是您没有在每次调用 tempchange 时重新初始化 words table。要解决您的问题,请将此行添加到 tempchange 函数的开头:

local words = {}

按照你的方式,每次调用 tempchange(3 次,在上面的打印语句序列中),你都会继续添加到 words。这意味着在这个 for 循环中:

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

...您继续添加更多引号。

每次调用该函数时,您只需要从一个新的 words table 开始。

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