Skip to main content

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__

__has_next__(self: _Self) -> Bool

Returns:

Bool

__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:

Tuple

copy

copy(self: _Self) -> _Self

Explicitly construct a copy of self.

Returns:

_Self: A copy of this value.

Was this page helpful?