这个无状态迭代器应该是一个没有条件语句的无限循环,但它不是

This stateless iterator supposed to be an infinite loop without a conditional statement, but it don't

在上一个问题中,我询问了一个会创建无限循环的迭代器(print nil),并了解了条件语句的重要性。好吧,由于某些原因,尽管没有条件语句,但此迭代器并未创建无限循环。


local function OnlyStrings(s)

  local function Iter(s, pos) 
    pos = pos + 1 
    --[[After assigned pos + 1 to pos, "while" will look at the condition again then see
    whether it's a string or not -- ]] 
    
    while type(s[pos]) ~= "string" do 
      pos = pos + 1 
    end 
    
    return pos, s[pos] 
    --pos is the control variable, it's supposed to + 1 forever without a conditional statement
  end
  return Iter, s, 0
end 
local t = {"bruh", 1, 2, "yep", true}
for i, string in OnlyStrings(t) do 
  print(string)
  --[[bruh
      yep ]] --
end

嗯,我假设 while 与此迭代器没有成为无限循环的原因有关。比如,while 是否充当条件语句? while 在得到 nil 之后是否使用了 break

您的代码以无限循环结束。

while type(s[pos]) ~= "string" do 
  pos = pos + 1 
end 
一旦到达 s[pos] 的最后一个元素,

将永远 运行。