Mojo trait
Iterator
The Iterator
trait describes a type that can be used as an iterator, e.g. in a for
loop.
Implemented traits
AnyType
,
Copyable
,
Movable
,
UnknownDestructibility
Aliases
__copyinit__is_trivial
alias __copyinit__is_trivial
A flag (often compiler generated) to indicate whether the implementation of __copyinit__
is trivial.
The implementation of __copyinit__
is considered to be trivial if:
- The struct has a compiler-generated trivial
__copyinit__
and all its fields have a trivial__copyinit__
method.
In practice, it means the value can be copied by copying the bits from one location to another without side effects.
__del__is_trivial
alias __del__is_trivial
A flag (often compiler generated) to indicate whether the implementation of __del__
is trivial.
The implementation of __del__
is considered to be trivial if:
- The struct has a compiler-generated trivial destructor and all its fields
have a trivial
__del__
method.
In practice, it means that the __del__
can be considered as no-op.
__moveinit__is_trivial
alias __moveinit__is_trivial
A flag (often compiler generated) to indicate whether the implementation of __moveinit__
is trivial.
The implementation of __moveinit__
is considered to be trivial if:
- The struct has a compiler-generated
__moveinit__
and all its fields have a trivial__moveinit__
method.
In practice, it means the value can be moved by moving the bits from one location to another without side effects.
Element
alias Element
Required methods
__copyinit__
__copyinit__(out self: _Self, existing: _Self, /)
Create a new instance of the value by copying an existing one.
Args:
- existing (
_Self
): The value to copy.
Returns:
_Self
__moveinit__
__moveinit__(out self: _Self, var existing: _Self, /)
Create a new instance of the value by moving the value of another.
Args:
- existing (
_Self
): The value to move.
Returns:
_Self
__has_next__
__next__
__next__(mut self: _Self) -> _Self.Element
Returns:
_Self.Element
Provided methods
bounds
bounds(self: _Self) -> Tuple[Int, Optional[Int]]
Returns bounds [lower, upper]
for the remaining iterator length.
Returns a tuple where the first element is the lower bound and the second
is an optional upper bound (None
means unknown or upper > Int.MAX
).
This helps collections pre-allocate memory when constructed from iterators.
The default implementation returns (0, None)
.
Safety
If the upper bound is not None, implementations must ensure that lower <= upper
.
The bounds are hints only - iterators may not comply with them. Never omit safety
checks when using bounds
to build collections.
Example:
fn build_list[I: Iterator & Iterable](iter: I) -> List[I.Element]:
var lower, _upper = iter.bounds()
var list = List[I.Element](capacity=lower)
for element in iter:
list.append(element^)
return list
Returns:
copy
copy(self: _Self) -> _Self
Explicitly construct a copy of self.
Returns:
_Self
: A copy of this value.
Was this page helpful?
Thank you! We'll create more content like this.
Thank you for helping us improve!