У меня есть бинарная черта 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
Как мне заставить этот пример работать? ( площадка * * тысяча двадцать-одна) * * тысяча двадцать два