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 书。