Доброго времени суток,
Программируя небольшую игрулечку на piston+rapier2d, создал класс героя(Hero) :
pub struct Hero {
    pub rotation: f64,
    pub health: f32,
    pub texture: Texture,
    step_size: f64,
    // --- [ Physics ] --- //
    body_handle: Option<RigidBodyHandle>,
    rigid_body_set: Option<Rc<RefCell<RigidBodySet>>>,
    collider_set: Option<Rc<RefCell<ColliderSet>>>,
}
Три последние члена класса задаются через функцию trait-a PhysicalObject - init_with_physics(…).
Вопрос у меня в том правильно ли я всё делаю, меня смущает синтаксическая «огромность» при доступе к этим трём членам класса. В частности, когда использую Option<Rc<RefCell<…>>>
Например что бы получить rigid_body_set :
let rigid_set_rc = self.rigid_body_set.clone().unwrap();
let mut rigid_set = rigid_set_rc.borrow_mut();
В одну строчку это сделать не получилось - rust-analyzer ругается :
temporary value dropped while borrowed consider using a
let>binding to create a longer lived value
Также как понимаю при unwrap(), объект внутри option перемещается, поэтому приходится clone() использовать. Правильно ли это? Или есть другие подходы представлять в struct неинициализированные данные, которые могут быть позже заданы.







