Document how to create and use custom iterators

This commit is contained in:
Neil Moore
2018-04-04 01:06:37 -04:00
parent fdd32778cc
commit 97c3d0c975

View File

@@ -412,6 +412,51 @@ while() loops are the same everywhere:
print(strings[i])
i += 1
Custom iterators
----------------
You can create custom iterators in case the default ones don't quite meet your
needs by overriding the Variant class's ``_iter_init``, ``_iter_next``, and ``_iter_get``
functions in your script. An example implementation of a forward iterator follows:
::
class FwdIterator:
var start, curr, end, increment
func _init(start, stop, inc):
self.start = start
self.curr = start
self.end = stop
self.increment = inc
func is_done():
return (curr < end)
func do_step():
curr += increment
return is_done()
func _iter_init(arg):
curr = start
return is_done()
func _iter_next(arg):
return do_step()
func _iter_get(arg):
return curr
And it can be used like any other iterator:
::
var itr = FwdIterator.new(0, 6, 2)
for i in itr:
print(i) # Will print 0, 2, and 4
Make sure to reset the state of the iterator in ``_iter_init``, otherwise nested
for-loops that use custom iterators will not work as expected.
Duck typing
-----------