resueltos probabilidad muestrales mendenhall medicina introducción introduccion inferencial estadística estadistica ejercicios ejemplos distribuciones distribucion bioestadistica ala 13th rust

rust - probabilidad - Cómo inicializar los campos de estructura que se hacen referencia entre sí.



introduccion ala probabilidad y estadistica mendenhall 13th pdf (1)

No solo hay un problema con la inicialización, también podría haber problemas con la destrucción, si GameIterator implementó Drop : el compilador tendría que saber que necesita destruir game_iter antes de game_window , de lo contrario game_window tendría una referencia a un GameWindowGLFW destruido mientras ejecuta su método drop()

No hay manera de pasar la vida útil de la estructura como un argumento de por vida. Lo único que puedes hacer es eliminar el campo MyGame de MyGame y pasar una instancia de MyGame al inicializador de MyGame . Si desea encapsular esto para que el usuario no necesite crear un GameWindowGLFW , puede escribir un método que cree un GameWindowGLFW y un MyGame en la pila y llame a un cierre que solo acepte un argumento de MyGame .

pub struct MyGame<''a> { game_iter: GameIterator<''a, GameWindowGLFW>, //... } impl<''a> MyGame<''a> { fn new(game_window: &''a mut GameWindowGLFW) -> MyGame<''a> { MyGame { game_iter: GameIterator { game_window: game_window }, } } } fn start_game(callback: |game: &mut MyGame|) { let mut game_window = GameWindowGLFW; let mut game = MyGame::new(&mut game_window); callback(&mut game); } fn main() { start_game(|game| { /* use game here */ }); }

Actualmente quiero definir una estructura para un juego de Piston usando GamerIterator:

pub struct MyGame<''a> { game_window: GameWindowGLFW, game_iter: GameIterator<''a, GameWindowGLFW>, //... }

El GameIterator es genérico en GameWindow y su vida útil. Quiero decirle al compilador que tiene la misma vida útil que el campo "game_window" / "the whole struct" y omitir la vida útil de la estructura.

También tengo dificultades para inicializar esto:

MyGame { game_window: GameWindowGLFW::new(GameWindowSettings {/*...*/}, game_iter: GameIterator::new(&mut game_window, &game_iter_settings), // game_window cannot be used here //... }

Creo que puedo Option<GameIterator<...>> el problema de la inicialización utilizando la Option<GameIterator<...>> y un método init (), pero me gustaría evitar esto porque puedo garantizar que el game_iter esté presente después de que game_iter new() .

¿Cuál es la forma idiomática de escribir esto?