【发布时间】:2015-02-20 11:01:34
【问题描述】:
编者注:此代码示例来自 Rust 1.0 之前的版本,不是有效的 Rust 1.0 代码。由于更改了
for循环的实现方式,此代码的更新版本不再产生错误。
我正在用 Rust 编写一个 Vector 结构。
pub struct Vector {
pub x: f32,
pub y: f32,
pub z: f32,
curr: uint
}
我想为它写一个简单的迭代器,这样我就可以迭代向量的元素。它有时很有用,而且我对 Rust 中的迭代器几乎一无所知。
这是我目前所拥有的。
impl Iterator<f32> for Vector {
fn next(&mut self) -> Option<f32> {
let new_next : Option<f32> = match self.curr {
0 => Some(self.x),
1 => Some(self.y),
2 => Some(self.z),
_ => None
};
let new_curr = (self.curr + 1) % 4;
mem::replace(&mut self.curr, new_curr);
new_next
}
}
现在理想情况下,我希望能够像这样使用它:
let u = Vector::new(0.0f32, 0.0f32, 0.0f32);
for element in u {
///
}
但是,我收到以下编译器错误:
error: cannot borrow immutable local variable `u` as mutable
所以我很难过。经过几个小时的谷歌搜索,我想不出任何东西。我觉得我错过了一些巨大的东西。
【问题讨论】:
-
请更新此问题或在标题中将其标记为已过时;迭代器现在使用关联类型,这个问题不再反映在问题或答案中实现它们的正确方法。