I couldn't find documentation for this anywhere:
pub trait Sum<A = Self> { //A = Self?
fn sum<I>(iter: I) -> Self where I: Iterator<Item=A>;
}
What purpose does the 'A = Self' serve? It doesn't look like a trait bound or anything...
I couldn't find documentation for this anywhere:
pub trait Sum<A = Self> { //A = Self?
fn sum<I>(iter: I) -> Self where I: Iterator<Item=A>;
}
What purpose does the 'A = Self' serve? It doesn't look like a trait bound or anything...
It's a default type parameter. Check out the Add
trait for ex:
pub trait Add<RHS = Self> {
type Output;
fn add(self, rhs: RHS) -> Self::Output;
}
If, for example, you wanted to implement it for a type Foo
, you can forgo mentioning the type parameter and write:
impl Add for Foo { ... }
instead of
impl Add<Foo> for Foo { ... }
It makes the syntax a little nicer, makes things more simple for common use cases, and also allows to add genericity to a trait or a struct in a backward compatible way.
See the RFC and the tracking issue if you want more details.
Ahhh no kidding -- makes sense to me. Especially the backward compatible part.
Thanks man!