rust 回归“自我”时才有了借用的自我

l7mqbcuq  于 2022-11-12  发布在  其他
关注(0)|答案(3)|浏览(176)

在下面的代码中,我借用了self,那么我该如何返回Self呢?还是创建一个新的impl示例并返回它呢?

pub fn add_minutes(&self, minutes: i32) -> Self {
  self.minutes += minutes;
  // TODO return Self
}
yzuktlbb

yzuktlbb1#

不能从 borrowedSelf创建 ownedSelf。可以使用Clone创建一个对象的新副本(然后可以将该对象的所有权赋予函数的调用方),也可以返回一个对Self的引用,以便以后可以重新借用它,并链接使用&self的方法。

jmp7cifd

jmp7cifd2#

如果您有Clone,则可以:

pub fn add_minutes(&self, minutes: i32) -> Self {
  let mut cloned = self.clone();

  clone.minutes += minutes;

  clone
}

尽管这可能比允许就地修改效率低得多:

pub fn add_minutes(&mut self, minutes: i32) {
  self.minutes += minutes;
}
u4dcyp6a

u4dcyp6a3#

其他的答案已经从字面上解决了你的问题,但我认为这可能是一个xy问题。
看起来您可能只需要一种方法来修改传入的对象,在这种情况下,您需要self的一个可变借用,并且不返回任何内容:

pub fn add_minutes(&mut self, minutes: i32) {
  self.minutes += minutes;
}

相关问题