diff --git a/doc/docs.md b/doc/docs.md index 33aa6ac989..8a598ac75a 100644 --- a/doc/docs.md +++ b/doc/docs.md @@ -1331,6 +1331,45 @@ println(numbers) // [1, 2, 3] ``` When an identifier is just a single underscore, it is ignored. +##### Custom iterators +Types that implement a `next` method returning an `Option` can be iterated +with a `for` loop. + +```v +struct SquareIterator { + arr []int +mut: + idx int +} + +fn (mut iter SquareIterator) next() ?int { + if iter.idx >= iter.arr.len { + return error('') + } + defer { + iter.idx++ + } + return iter.arr[iter.idx] * iter.arr[iter.idx] +} + +nums := [1, 2, 3, 4, 5] +iter := SquareIterator{ + arr: nums +} +for squared in iter { + println(squared) +} +``` + +The code above prints: +``` +1 +4 +9 +16 +25 +``` + ##### Map `for` ```v