我可以使用像传递值一样的可变引用方法吗?例如,我可以使用
o.mth(&mut self, ...)
作为
o.mth(self, ...)
这样我就可以返回结果而不必担心o
的生命周期。它可能涉及move
闭包,或某种包装?
对于上下文,我试图使用rust-csv包在CSV记录上返回一个盒装迭代器,但是迭代器不会比读者更长,Reader::records(&'t mut self)
可以借用它。将其与BufRead::lines(self)
进行对比,{{3}}会消耗其读者,因此可以在没有生命问题的情况下返回。
答案 0 :(得分:2)
self
,&self
和&mut self
方法存在的原因是因为它们的行为不同,具有不同的限制,并允许不同的事物。
在这种情况下,您最终可能最终会尝试to create an iterator that yields references to itself,这是不允许的,或store a value and a reference to that value in the same struct,这也是不允许的。