Keyword impl[][src]

Expand description

为类型实现一些功能。

impl 关键字主要用于定义类型的实现。 固有实现是独立的,而 trait 实现则用于为类型或其他 traits 实现 traits。

函数和 const 都可以在实现中定义。impl 块中定义的函数可以是独立的,这意味着将其称为 Foo::bar()。 如果该函数将 self&self&mut self 作为它的第一个参数,则也可以使用方法调用语法来调用它,这是任何面向 object 的程序员 (如 foo.bar()) 都熟悉的功能。

struct Example {
    number: i32,
}

impl Example {
    fn boo() {
        println!("boo! Example::boo() was called!");
    }

    fn answer(&mut self) {
        self.number += 42;
    }

    fn get_number(&self) -> i32 {
        self.number
    }
}

trait Thingy {
    fn do_thingy(&self);
}

impl Thingy for Example {
    fn do_thingy(&self) {
        println!("doing a thing! also, number is {}!", self.number);
    }
}
Run

有关实现的更多信息,请参见 Rust bookReference

impl 关键字的另一个用法是 impl Trait 语法,可以将其视为 “a concrete type that implements this trait” 的简写。 它的主要用途是与闭包一起使用,闭包具有在编译时生成的类型定义,不能简单地将其键入。

fn thing_returning_closure() -> impl Fn(i32) -> bool {
    println!("here's a closure for you!");
    |x: i32| x % 3 == 0
}
Run

有关 impl Trait 语法的更多信息,请参见 Rust book