私はthe robot simulator Exercism exerciseを解決しようと多くの楽しみを持っていますが、私は、私はエレガントな解決策を考え出すことができるように思えいない問題を移動する値に直面している:私は値が移動されないようにするにはどうすればよいですか?
impl Robot {
pub fn new(x: isize, y: isize, d: Direction) -> Self {
Robot { position: Coordinate { x: x, y: y }, direction: d }
}
pub fn turn_right(mut self) -> Self {
match self.direction {
// ...
};
self
}
pub fn turn_left(mut self) -> Self {
match self.direction {
// ...
};
self
}
pub fn advance(mut self) -> Self {
match self.direction {
// ...
};
self
}
pub fn instructions(self, instructions: &str) -> Self {
for instruction in instructions.chars() {
match instruction {
'A' => { self.advance(); },
'R' => { self.turn_right(); },
'L' => { self.turn_left(); },
_ => {
println!("{} is not a valid instruction", instruction);
},
};
}
self
}
このエラーが出る:
enter code hereerror[E0382]: use of moved value: `self`
--> src/lib.rs:60:26
|
60 | 'A' => { self.advance(); },
| ^^^^ value moved here in previous iteration of loop
|
= note: move occurs because `self` has type `Robot`, which does not implement the `Copy` trait
error[E0382]: use of moved value: `self`
--> src/lib.rs:61:26
|
60 | 'A' => { self.advance(); },
| ---- value moved here
61 | 'R' => { self.turn_right(); },
| ^^^^ value used here after move
|
= note: move occurs because `self` has type `Robot`, which does not implement the `Copy` trait
私はadvance()
戻りself
ので、エラーが出ると思うが、それはブロック内で使われているとして、値がまだ移動した理由を私は理解していません。私は実際にCopy
を実装する必要がありますか、または生涯のユースケースがありませんか?
借りてもらえますか?また、 'Copy'を実装してみませんか? –
'Copy'を実装しませんが、[builder pattern](https://aturon.github.io/ownership/builders.html)を読んでください – wimh
@EliSadoff私は実際に良いコードを書く方法を学ぼうとしています。私はここでのコピーは不必要にリソースを必要とするので悪いと思う。 – stamm