成对循环搞砸了
In pairs loop messed up
一个正常工作的代码,但它 没有像我预期的那样工作,严重的是 Lua
local Exceptions = {1,2,3,5,7}
local mt = {__mod = function(v1, v2)
for i, v in pairs (v1) do
if v2 == v then
return true
else
return false
end
end
end }
setmetatable(Exceptions, mt)
print(Exceptions % 2)
v2 == v(Exceptions 里面有 2,所以它应该 return 是真的,但是不,它 return 是假的。这很烦人)
当您 return v2 == v
比较的结果时,您就跳出了 pairs() 循环。
从未达到 2 的值,您过早退出 __mod
函数,报告比较 1 和 2 的结果。
在您的第一个循环中,运行 v2
是 2
,v
是 1
。作为 2 ~= 1
你 return false 就是这样。没有更多的迭代。在循环后移动return false
。
local Exceptions = {1,2,3,5,7}
local mt = {__mod = function(v1, v2)
for i, v in pairs (v1) do
if v2 == v then
return true
end
end
return false
end }
setmetatable(Exceptions, mt)
print(Exceptions % 2)
而不是
if v2 == v then
return true
else
return false
end
你可以简单地写
return v2 == v
我个人不鼓励为了计算模数以外的其他事情改变模数运算符。我本来期望在没有看到实现或任何评论的情况下进行逐元素模数计算。为什么不简单地编写一个函数 isInTable(someTable, someNumber)
来做同样的事情呢?同样的结果,没有混淆。
一个正常工作的代码,但它 没有像我预期的那样工作,严重的是 Lua
local Exceptions = {1,2,3,5,7}
local mt = {__mod = function(v1, v2)
for i, v in pairs (v1) do
if v2 == v then
return true
else
return false
end
end
end }
setmetatable(Exceptions, mt)
print(Exceptions % 2)
v2 == v(Exceptions 里面有 2,所以它应该 return 是真的,但是不,它 return 是假的。这很烦人)
当您 return v2 == v
比较的结果时,您就跳出了 pairs() 循环。
从未达到 2 的值,您过早退出 __mod
函数,报告比较 1 和 2 的结果。
在您的第一个循环中,运行 v2
是 2
,v
是 1
。作为 2 ~= 1
你 return false 就是这样。没有更多的迭代。在循环后移动return false
。
local Exceptions = {1,2,3,5,7}
local mt = {__mod = function(v1, v2)
for i, v in pairs (v1) do
if v2 == v then
return true
end
end
return false
end }
setmetatable(Exceptions, mt)
print(Exceptions % 2)
而不是
if v2 == v then
return true
else
return false
end
你可以简单地写
return v2 == v
我个人不鼓励为了计算模数以外的其他事情改变模数运算符。我本来期望在没有看到实现或任何评论的情况下进行逐元素模数计算。为什么不简单地编写一个函数 isInTable(someTable, someNumber)
来做同样的事情呢?同样的结果,没有混淆。