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

在之前的问题中,我问过一个创建无限循环(打印 nil)的迭代器,并学到了条件语句的重要性。好吧,出于某些原因,尽管没有条件语句,但这个迭代器没能创建无限循环。


local function OnlyStrings(s)

  local function Iter(s, pos)
    pos = pos + 1
    --[[将 pos + 1 分配给 pos 之后,"while" 将再次查看条件
    看它是否是字符串-- ]]

    while type(s[pos]) ~= "string" do
      pos = pos + 1
    end

    return pos, s[pos]
    --pos 是控制变量,它应该一直加 1 而不需要条件语句
  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

点赞
用户2858170
用户2858170

你的代码陷入了一个无限循环之中。

while type(s[pos]) ~= "string" do
  pos = pos + 1
end

当你达到 s[pos] 的最后一个元素时,这个循环将永远执行下去。

2020-09-14 13:42:12