【发布时间】:2016-08-03 17:35:49
【问题描述】:
我对无状态迭代器的概念感到困惑。作为练习,我编写了一个迭代器来打印给定字符串的所有非空子字符串。代码如下。
local function iter(state, i)
local str = state.str
if type(str) ~= "string" or str == "" then return nil end
if state.ending > #str then return nil end
local start = state.start
local ending = state.ending
if start == ending then
state.ending = ending + 1
state.start = 1
else
state.start = start + 1
end
return string.sub(str, start, ending)
end
function allSubstrings(str)
return iter, { str = str, start = 1, ending = 1 }, nil
end
for substr in allSubstrings("abcd123") do
print(substr)
end
我使用一个表{ str = str, start = 1, ending = 1 }作为所谓的不变状态,但是我必须在iter本地函数中更改这个表中的字段。那么这个迭代器是无状态的还是具有复杂状态的呢?如果它不是无状态的,有没有办法用无状态迭代器来实现这个功能?
谢谢。
【问题讨论】: