Update generalized-iteration.md

This commit is contained in:
Arseny Kapoulkine 2022-02-02 08:21:42 -08:00 committed by GitHub
parent 4869095e61
commit 36802f0c75
Signed by: DevComp
GPG key ID: 4AEE18F83AFDEB23

View file

@ -46,7 +46,7 @@ end
### __iter
To support self-iterating objects, we modify the iteration protocol as follows: instead of simply expanding the result of expression `iter` into three variables (`gen`, `state` and `index`), we check if the first result has an `__iter` metamethod (which can be the case if it's a table, userdata or another composit object (e.g. a record in the future). If it does, the metamethod is called with `gen` as the first argument, and the returned three values replace `gen`/`state`/`index`. This happens *before* the first iteration of the `while` loop:
To support self-iterating objects, we modify the iteration protocol as follows: instead of simply expanding the result of expression `iter` into three variables (`gen`, `state` and `index`), we check if the first result has an `__iter` metamethod (which can be the case if it's a table, userdata or another composit object (e.g. a record in the future). If it does, the metamethod is called with `gen` as the first argument, and the returned three values replace `gen`/`state`/`index`. This happens *before* the loop:
```lua
if getmetatable(gen) and getmetatable(gen).__iter then