【发布时间】:2014-01-03 14:54:45
【问题描述】:
我在结构上有类似以下方法:
impl<'a> SomeStructure<'a> {
// I need &'a mut because the iterator may mutate SomeStructure
fn iter<'a>(&'a mut self) -> SomeIterator<'a> {
SomeIterator { object: self }
}
fn test_something(&self) -> bool {
self.some_field < 0
}
}
然后我想这样使用它们:
impl<'a> SomeTrait for &'a mut SomeStructure<'a> {
fn do_something(self) {
for e in self.iter() {
...
if self.test_something() {
break;
}
}
}
}
但是,Rust 不允许这样做(我已经修复了错误消息,因此它们参考了上面的示例代码):
io/convert_io.rs:119:17: 119:22 error: cannot borrow `*self` as immutable because it is also borrowed as mutable
io/convert_io.rs:119 if self.test_something() {
^~~~~
io/convert_io.rs:117:18: 117:23 note: previous borrow of `*self` occurs here
io/convert_io.rs:117 for e in self.iter() {
^~~~~
但我看不出self.test_something() 调用中的不可变借用如何干扰更早创建迭代器,即使迭代器确实改变了原始对象。
您能否解释一下这里发生了什么以及如何解决它?
【问题讨论】:
-
这真的是 Rust 的样子吗?哎呀!