Keyword SelfTy

source ·
Expand description

traitimpl 块中的实现类型,或类型定义中的当前类型。

在类型定义中:

struct Node {
    elem: i32,
    // `Self` 在这里是 `Node`。
    next: Option<Box<Self>>,
}
Run

impl 块中:

struct Foo(i32);

impl Foo {
    fn new() -> Self {
        Self(0)
    }
}

assert_eq!(Foo::new().0, Foo(0).0);
Run

泛型参数隐含在 Self 中:

struct Wrap<T> {
    elem: T,
}

impl<T> Wrap<T> {
    fn new(elem: T) -> Self {
        Self { elem }
    }
}
Run

trait 定义和相关的 impl 块中:

trait Example {
    fn example() -> Self;
}

struct Foo(i32);

impl Example for Foo {
    fn example() -> Self {
        Self(42)
    }
}

assert_eq!(Foo::example().0, Foo(42).0);
Run