Keyword impl

source ·
Expand description

为类型实现一些功能。

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

函数和 const 都可以在实现中定义。impl 块中定义的函数可以是独立的,这意味着将其称为 Foo::bar()。 如果函数以 self&self&mut self 作为它的第一个参数,那么也可以使用方法调用语法调用它,这是任何面向对象的程序员都熟悉的特性,比如 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 书Reference

impl 关键字的另一个用法是 impl Trait 语法,可以将其视为 “实现此 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 书