I have the following code:
pub enum Direction {
Up, Right, Down, Left, None
}
struct Point {
y: i32,
x: i32
}
pub struct Chain {
segments: Vec<Point>,
direction: Direction
}
and later I implement the following function:
fn turn (&mut self, dir: Direction) -> i32 {
use std::num::SignedInt;
if dir == self.direction { return 0; }
else if SignedInt::abs(dir as i32 - self.direction as i32) == 2 { return -1; }
else {
self.direction = dir;
return 1;
}
}
I get the error:
error: cannot move out of borrowed content
foo.rs:45 else if SignedInt::abs(dir as i32 - self.direction as i32) == 2 { return 1; }
^~~~
foo.rs:47:21: 47:24 error: use of moved value: `dir`
foo.rs:47 self.direction = dir;
^~~
foo.rs:45:26: 45:29 note: `dir` moved here because it has type `foo::Direction`, which is non-copyable
foo.rs:45 else if SignedInt::abs(dir as i32 - self.direction as i32) == 2 { return 1; }
I've read about Rust ownership and borrowing, but I still don't really understand them, therefore I cannot fix this code. Could someone give me a working variant of what I pasted?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…