相关疑难解决方法(0)

为什么我要在特征上实现方法而不是作为特征的一部分?

在尝试Any更好地理解这个特性的同时,我看到它有一个impl阻碍特质本身.我不明白这个结构的目的,或者即使它有一个特定的名称.

我用"普通"特征方法和impl块中定义的方法做了一个小实验:

trait Foo {
    fn foo_in_trait(&self) {
        println!("in foo")
    }
}

impl dyn Foo {
    fn foo_in_impl(&self) {
        println!("in impl")
    }
}

impl Foo for u8 {}

fn main() {
    let x = Box::new(42u8) as Box<dyn Foo>;
    x.foo_in_trait();
    x.foo_in_impl();

    let y = &42u8 as &dyn Foo;
    y.foo_in_trait();
    y.foo_in_impl(); // May cause an error, see below
}
Run Code Online (Sandbox Code Playgroud)

编者注

在Rust的版本中,包括Rust 1.15.0,该行 y.foo_in_impl()会导致错误:

error: borrowed value does not live long enough
  --> src/main.rs:20:14 …
Run Code Online (Sandbox Code Playgroud)

traits rust

32
推荐指数
2
解决办法
3194
查看次数

标签 统计

rust ×1

traits ×1