这个无状态迭代器应该是一个没有条件语句的无限循环,但它不是
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]
的最后一个元素, 将永远 运行。
在上一个问题中,我询问了一个会创建无限循环的迭代器(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]
的最后一个元素,将永远 运行。