Aşağıdaki, etrafında dönen iki topun bulunduğu dikdörtgen alanlı bir alanla basit bir simülasyondur. Field
yapısının, her bir topuna update
adını veren bir update
yöntemine sahiptir. Toplar, update
yönteminde, hızlarına göre hareket etmelidir. Ama aynı zamanda ben Ball
yapı güncelleme işlevine sınırları ve diğer topun hakkında bilgi almak nasıl alanda .:Değiştirilebilir öz referansı sahip olunan nesnenin yöntemine geçirme
fn main() {
let mut field = Field::new(Vector2d { x: 100, y: 100 });
field.update();
}
#[derive(Copy, Clone)]
struct Vector2d {
x: i32,
y: i32,
}
struct Ball {
radius: i32,
position: Vector2d,
velocity: Vector2d,
}
impl Ball {
fn new(radius: i32, position: Vector2d, velocity: Vector2d) -> Ball {
Ball {
radius: radius,
position: position,
velocity: velocity,
}
}
fn update(&mut self, field: &Field) {
// check collisions with walls
// and other objects
}
}
struct Field {
size: Vector2d,
balls: [Ball; 2],
}
impl Field {
fn new(size: Vector2d) -> Field {
let position_1 = Vector2d {
x: size.x/3,
y: size.y/3,
};
let velocity_1 = Vector2d { x: 1, y: 1 };
let position_2 = Vector2d {
x: size.x * 2/3,
y: size.y * 2/3,
};
let velocity_2 = Vector2d { x: -1, y: -1 };
let ball_1 = Ball::new(1, position_1, velocity_1);
let ball_2 = Ball::new(1, position_2, velocity_2);
Field {
size: size,
balls: [ball_1, ball_2],
}
}
fn update(&mut self) {
// this does not compile
self.balls[0].update(self);
self.balls[1].update(self);
}
}
yanı sıra sınırları birbirine tepki gerekir?
error[E0502]: cannot borrow `*self` as immutable because `self.balls[..]` is also borrowed as mutable
--> src/main.rs:62:30
|
62 | self.balls[0].update(self);
| ------------- ^^^^- mutable borrow ends here
| | |
| | immutable borrow occurs here
| mutable borrow occurs here
Bunu anlayışla karşılıyorum, ama bunun üstesinden nasıl bilmiyorum:
self.balls[0].update(self);
self.balls[1].update(self);
aşağıdaki hatayı verilmesi: Field::update
bu satırlar, derlemek yoktur.
Evet, çalışacaktır . Dostum, Rust gerçekten programlamam konusunda farklı düşünmemi sağlıyor. –