如何解决更改变量顺序后,“ for”循环突然变得无限大
我刚刚意识到,返回变量的顺序确实会影响“ for”循环的工作方式,这很有趣
local function FakeIpairs(t) --The factory
local i = i or 0 --The control variable
local function Iterator() --The iterator function
i = i + 1 --Increment the control variable
v = t[i]
return v,i
end
return Iterator
end
arr = {1,9,8,[5] = 10}
for v,i in FakeIpairs(arr) do
print(v)
end
--[[ 1
9
8 --]]
我更改了变量的顺序,并且发生了
local function FakeIpairs(t) --The factory
local i = i or 0 --The control variable
local function Iterator() --The iterator function
i = i + 1 --Increment the control variable
v = t[i]
return i,v --[[CHANGED HERE]]
end
return Iterator
end
arr = {1,[5] = 10}
for i,v --[[AND HERE]] in FakeIpairs(arr) do
print(i)
end
--[[ 1
9
8
nil
10
nil
nil
nil...--]]
在没有任何条件语句的情况下立即变成了无限循环(我将条件语句放入函数中,并且效果很好)。
for
循环与返回变量的顺序之间是什么关系?如果我将return v,i
更改为i
,为什么代码会永远保留v,i
并递增i,v
?
解决方法
中对此进行了解释
这些变量中的第一个是控制变量。
以及以后的
如果控制变量变为nil,则循环终止。否则,将执行主体,然后循环进行下一次迭代。
在第二个示例中,第一个变量是索引(控制变量)。索引在每次迭代时递增,并且永远不会为零。而且,当控制变量永远不会变为nil时,循环永远不会停止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。