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)
Обсуждают сегодня