mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
docs: document custom iterators (#10629)
This commit is contained in:
parent
8b901df366
commit
aa8d9b6cbc
39
doc/docs.md
39
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
|
||||
|
Loading…
Reference in New Issue
Block a user