相关疑难解决方法(0)

什么使某事成为"特质对象"?

最近的Rust改变使得"特质对象"对我来说更加突出,但我只是模糊地掌握了什么让某些东西成为特质对象.特别是一个变化是允许特征对象将特征实现转发到内部类型的即将发生的变化.

鉴于一个特点Foo,我很确定这Box<Foo>是一个特质对象.是否&Foo也是一个特质对象?那么其他智能指针之类的东西Rc还是Arc?我怎样才能创建自己的类型作为特征对象呢?

引用只提到一次trait对象,但没有提到定义.

traits rust

38
推荐指数
3
解决办法
5858
查看次数

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

在尝试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中实际使用动态大小的类型?

理论上,动态大小类型(DST)已经着陆,我们现在应该能够使用动态大小的类型实例.实际上,我既不能使它工作,也不能理解它周围的测试.

一切似乎都围绕Sized?关键字......但你究竟是如何使用它的呢?

我可以把一些类型放在一起:

// Note that this code example predates Rust 1.0
// and is no longer syntactically valid

trait Foo for Sized? {
    fn foo(&self) -> u32;
}

struct Bar;
struct Bar2;

impl Foo for Bar { fn foo(&self) -> u32 { return 9u32; }}
impl Foo for Bar2 { fn foo(&self) -> u32 { return 10u32; }}

struct HasFoo<Sized? X> {
    pub f:X
}
Run Code Online (Sandbox Code Playgroud)

...但是如何创建一个HasFooDST 实例,或者具有?BarBar2

试图这样做似乎总是导致:

<anon>:28:17: 30:4 error: …
Run Code Online (Sandbox Code Playgroud)

rust

14
推荐指数
1
解决办法
6864
查看次数

标签 统计

rust ×3

traits ×2