【发布时间】:2017-05-01 13:01:03
【问题描述】:
我可以使用可变引用方法,比如传值方法吗?例如,我可以使用
o.mth(&mut self, ...)
作为
o.mth(self, ...)
这将允许我返回结果而不用担心o 的生命周期。它可能涉及move 闭包或某种包装器?
对于上下文,我正在尝试使用 rust-csv 包在 CSV 记录上返回一个装箱的迭代器,但迭代器的寿命不能超过阅读器,Reader::records(&'t mut self) 可变地借用。将此与 BufRead::lines(self) 进行对比,后者会消耗其阅读器,因此可以在没有生命周期问题的情况下返回。
【问题讨论】:
-
相关:stackoverflow.com/q/36645452/155423、stackoverflow.com/q/30488928/155423、stackoverflow.com/q/38797960/155423——无论出于何种原因,每个人都想返回一个 CSV 迭代器。
-
由于迭代器元素没有被借用,看起来记录迭代器可以被重新制作为按值获取
R: Read。由于&mut R实现了Read where R: Read,它涵盖了这两种情况。 -
@bluss 是的,我对此感到惊讶。我认为它们将是字符串切片。不过,这样的变化仍然是一个破坏性的 API 变化,但适应起来并不可怕。
标签: rust lifetime borrow-checker