Impl trait in return types

stable

In the section on type aliases, we gave the example of a function odd_integers that returned a type alias OddIntegers. If you prefer, you can forego defining the type alias and simply return an impl Trait directly:


#![allow(unused)]
fn main() {
fn odd_integers(start: u32, stop: u32) -> impl Iterator<Item = u32> {
    (start..stop).filter(|i| i % 2 != 0)
}
}

This is almost equivalent to the type alias we saw before, but there are two differences:

  • The defining scope for the impl trait is just the function odd_integers, and not the enclosing module.
    • This means that other functions within the same module cannot observe or constrain the hidden type.
  • There is no direct way to name the resulting type (because you didn't define a type alias).