我可以使用像值传递的可变引用方法吗?

时间:2016-12-15 19:59:34

标签: rust lifetime borrow-checker

我可以使用像传递值一样的可变引用方法吗?例如,我可以使用

o.mth(&mut self, ...)

作为

o.mth(self, ...)

这样我就可以返回结果而不必担心o的生命周期。它可能涉及move闭包,或某种包装?

对于上下文,我试图使用rust-csv包在CSV记录上返回一个盒装迭代器,但是迭代器不会比读者更长,Reader::records(&'t mut self)可以借用它。将其与BufRead::lines(self)进行对比,{{3}}会消耗其读者,因此可以在没有生命问题的情况下返回。

1 个答案:

答案 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,这也是不允许的。