我有一些包含一些特征core::Object
对象的框:
pub struct Packfile<'a> {
pub version: u32,
pub objects: Vec<Box<core::Object + 'a>>,
...
现在,我希望Packfile
的一个方法可选地返回其中一个对象:-> Option<Box<core::Object + 'a>>
。因此,让i
作为对我想要的索引的引用,我将返回:
Some(self.objects[*i])
好的,这不起作用,因为我正在移动vec外面的盒子。说得通。我们clone
(core::Object
继承自Clone
)。
Some(self.objects[*i].clone())
现在,这是我不明白的地方。 self.objects[*i]
是一个方框,clone()
位于方框do this上:impl<T> Clone for Box<T> where T: Clone { fn clone(&self) -> Box<T>; }
所以clone()
应该给我一个方框,对吧?但是我得到了这个错误:
src/packfile/mod.rs:190:20: 190:44 error: mismatched types:
expected `Box<core::Object + 'a>`,
found `core::Object + 'a`
(expected box,
found trait core::Object)
src/packfile/mod.rs:190 Some(self.objects[*i].clone()),
^~~~~~~~~~~~~~~~~~~~~~~~
所以我不知道为什么我从T
获得了Box<T>
而不是clone()
。
你能帮助我吗?
答案 0 :(得分:2)
所以我不知道为什么我从克隆()获得T而不是Box。
方法也执行auto deref。我不知道core::Object
是什么,但如果它实现了Clone
,那就是为什么,我打赌。
答案 1 :(得分:2)