在下面的代码中,我借用了self,那么我该如何返回Self呢?还是创建一个新的impl示例并返回它呢?
self
Self
pub fn add_minutes(&self, minutes: i32) -> Self { self.minutes += minutes; // TODO return Self }
yzuktlbb1#
不能从 borrowedSelf创建 ownedSelf。可以使用Clone创建一个对象的新副本(然后可以将该对象的所有权赋予函数的调用方),也可以返回一个对Self的引用,以便以后可以重新借用它,并链接使用&self的方法。
Clone
&self
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; }
u4dcyp6a3#
其他的答案已经从字面上解决了你的问题,但我认为这可能是一个xy问题。看起来您可能只需要一种方法来修改传入的对象,在这种情况下,您需要self的一个可变借用,并且不返回任何内容:
3条答案
按热度按时间yzuktlbb1#
不能从 borrowed
Self
创建 ownedSelf
。可以使用Clone
创建一个对象的新副本(然后可以将该对象的所有权赋予函数的调用方),也可以返回一个对Self
的引用,以便以后可以重新借用它,并链接使用&self
的方法。jmp7cifd2#
如果您有
Clone
,则可以:尽管这可能比允许就地修改效率低得多:
u4dcyp6a3#
其他的答案已经从字面上解决了你的问题,但我认为这可能是一个xy问题。
看起来您可能只需要一种方法来修改传入的对象,在这种情况下,您需要self的一个可变借用,并且不返回任何内容: