小编mwg*_*kgk的帖子

如何从对象安全的特征对象中移出一个值?

A Mech带有一个驱动程序,它是一个Named实体.在运行时,省略的Mech构造函数会查询要使用的特定类型驱动程序的外部源.

trait Named {
    fn name(self) -> String;
}

struct Person {
    first_name: String,
    last_name: String
}

impl Named for Person {
    fn name(self) -> String {
        format!("{} {}", self.first_name, self.last_name)
    }
}

pub struct Mech<'a> {
    driver: Box<Named + 'a>,
}

impl<'a> Mech<'a> {
    pub fn driver_name(self) -> String {
        self.driver.name()
    }
}
Run Code Online (Sandbox Code Playgroud)

方法driver_name将所有权返回给a String,以便在链式调用中进一步使用(在实际代码中它是a Command).它编译失败:

error[E0161]: cannot move a value of type Named + 'a: the size of …
Run Code Online (Sandbox Code Playgroud)

traits ownership rust trait-objects

3
推荐指数
1
解决办法
206
查看次数

标签 统计

ownership ×1

rust ×1

trait-objects ×1

traits ×1