看起来相同的字符串在 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}}'
我希望字符串 m
和 tempchange(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
因此,即使字符串 m
和 tempchange(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 开始。
另外,我今天早些时候误解了你的问题。对此我深表歉意。
我在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}}'
我希望字符串 m
和 tempchange(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
因此,即使字符串 m
和 tempchange(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 开始。
另外,我今天早些时候误解了你的问题。对此我深表歉意。