【发布时间】:2018-11-02 20:21:59
【问题描述】:
我有一个二元特征Resolve。
pub trait Resolve<RHS = Self> {
type Output;
fn resolve(self, rhs: RHS) -> Self::Output;
}
我实现了一些微不足道的特征,其中两个参数都是通过引用获取的(self 是 &'a Foo 和 rhs 是 &'b Foo):
struct Foo;
impl <'a, 'b> Resolve<&'b Foo> for &'a Foo {
type Output = Foo;
fn resolve(self, rhs: &'b Foo) -> Self::Output {
unimplemented!()
}
}
如果我现在写
fn main() {
let a: &Foo = &Foo;
let b = Foo;
a.resolve(&b);
}
它会编译得很好,但如果我尝试在我的结构 Signal 上实现它,它将无法工作。
pub struct Signal<'a, T> {
ps: Vec<&'a T>,
}
impl<'a, T: Resolve<&'a T, Output = T> + 'a> Signal<'a, T> {
pub fn foo(&mut self) {
let a: &T = &self.ps[0];
let b = &self.ps[1];
a.resolve(b);
}
}
error[E0507]: cannot move out of borrowed content
--> src/main.rs:25:9
|
25 | a.resolve(b);
| ^ cannot move out of borrowed content
如何让这个示例正常工作? (playground)
【问题讨论】:
标签: rust