Option). И именно с 2 ветками match.
На обе реализации ругается borrow-checker.
Как-то можно заставить его работать (желательно и в первом и во втором случае) - объяснив, что можно продлять жизнь объектов ровно до return?
trait Best {
fn best(self, b: Self) -> Self;
}
/* variant-1 */
impl <T: Best> Best for Option<T> {
fn best(self, b: Self) -> Self {
return match (self, b) {
(Some(x), Some(y)) => Some(x.best(y)),
_ => self.xor(b),
}
}
}
/* variant-2 */
impl <T: Best> Best for Option<T> {
fn best(self, b: Self) -> Self {
return match (&self, &b) {
(Some(ref x), Some(ref y)) => Some((*x).best(*y)),
_ => self.xor(b),
}
}
}
Смотри, тут ситуация такая: у тебя best получает ownership над элементами. Это так и должно быть? То есть ты не можешь использовать x после x.best(y)
Обсуждают сегодня