Rust 如何初始化相互引用的结构字段

Rust 如何初始化相互引用的结构字段,rust,Rust,我当前想使用GameWriter为游戏定义一个结构: pub struct MyGame, //... } GameIterator在GameWindow及其生存期中是通用的。我想告诉编译器,它与字段“game\u window”/“thewholestruct”具有相同的生存期,并省略该结构的生存期 我也很难初始化这个: MyGame { game_window: GameWindowGLFW::new(GameWindowSettings {/*...*/}, game_i

我当前想使用GameWriter为游戏定义一个结构:

pub struct MyGame,
//...
}
GameIterator
GameWindow
及其生存期中是通用的。我想告诉编译器,它与字段“game\u window”/“thewholestruct”具有相同的生存期,并省略该结构的生存期

我也很难初始化这个:

MyGame {
    game_window: GameWindowGLFW::new(GameWindowSettings {/*...*/},
    game_iter: GameIterator::new(&mut game_window, &game_iter_settings), // game_window cannot be used here
    //...
}
我认为我可以通过使用
选项和init()方法来解决初始化问题,但我希望避免这种情况,因为我可以保证
游戏iter
新建()完成后出现


写这篇文章的惯用方法是什么?

如果
GameIterator
实现
Drop
:编译器必须知道它需要在
game\u窗口
之前销毁
game\u iter
,否则,
game_window
在运行其
drop()
方法时,将引用已销毁的
GameWindowGLFW

无法将结构本身的生存期作为生存期参数传递。您唯一能做的就是从
MyGame
中删除
game\u窗口
字段,并将
GameWindowGLFW
实例传递给
MyGame
的初始值设定项。如果您想封装它,以便用户不需要创建
GameWindowGLFW
,那么可以编写一个方法,在堆栈上创建
GameWindowGLFW
MyGame
,并调用一个只接受
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 */
    });
}
pub struct MyGame,
//...
}
恳求{

fn new(game_window:&'a mut GameWindowGLFW)->MyGameThank,我知道原因,但奇怪的是它不起作用……也无法想出一个编译器可以轻松验证的安全和通用的解决方案,所有这些都取决于依赖项和初始化/销毁顺序。