I don't get the point of those iterators either, but one possible argument for the operators would be external libraries taking in external objects using pairs or ipairs on them. Maybe I see pairs and ipairs as utility functions and not part of the syntax.
I think an operator like this would make more sense (although I probably wouldn't use it personally)
local meta = {}
meta.__index = meta
function meta:__iterator(a, ...)
local i = 0
return function()
i = i + 1
return self.foo[i] + a
end
end
local obj = setmetatable({}, meta)
obj.foo = {1,2,3,4,5}
for res in obj, 10 do
print(res)
end
>>11
>>12
>>13
>>14
>>15
>>16