Do you really want to Vectorbe an iterator? Usually structures and iterators are separated in them. Consider something like this:
pub struct Vector {
pub x: f32,
pub y: f32,
pub z: f32
}
pub struct VectorIter<'a> {
vector: &'a Vector,
cur: uint
}
impl<'a> Iterator<f32> for VectorIter<'a> {
fn next(&mut self) -> Option<f32> {
let r = match self.cur {
0 => self.vector.x,
1 => self.vector.y,
2 => self.vector.z,
_ => return None
};
self.cur += 1;
Some(r)
}
}
impl Vector {
fn iter(&self) -> VectorIter {
VectorIter {
vector: self,
cur: 0
}
}
}
let v = Vector { x: 1.0, y: 2.0, z: 3.0 };
for c in v.iter() {
println!("{}", c);
}
, Vector , Copy, :
pub struct Vector {
pub x: f32,
pub y: f32,
pub z: f32
}
pub struct VectorIter {
vector: Vector,
cur: uint
}
impl Iterator<f32> for VectorIter {
fn next(&mut self) -> Option<f32> {
let r = match self.cur {
0 => self.vector.x,
1 => self.vector.y,
2 => self.vector.z,
_ => return None
};
self.cur += 1;
Some(r)
}
}
impl Vector {
fn iter(&self) -> VectorIter {
VectorIter {
vector: *self,
cur: 0
}
}
}
let v = Vector { x: 1.0, y: 2.0, z: 3.0 };
for c in v.iter() {
println!("{}", c);
}
, , , Vector , . , , , , ( Copy , , Copy ). , , .