小编San*_*nes的帖子

如何从多次运行的移动 FnMut 闭包中读取文件?

我正在使用glutin,所以我的程序的主循环有一个移动关闭,我正在尝试使用rodio板条箱播放音频文件。使用以下代码,一切正常,每次程序循环时我都会发出一声哔哔声:

...
let sink: rodio::Sink = ...;
event_loop.run(move |event, _, control_flow | {
    let sound_file = File::open("beep.ogg").unwrap();
    let buf_wrap = BufReader::new(sound_file);
    let source = rodio::Decoder::new(buf_wrap).unwrap();
    sink.append(source);
    ...
});
...
Run Code Online (Sandbox Code Playgroud)

但是,这非常慢,因为我每次循环时都打开同一个文件,所以我尝试使用以下方法修复它:

...
let sound_file = File::open("beep.ogg").unwrap();
event_loop.run(move |event, _, control_flow | {
    let buf_wrap = BufReader::new(sound_file);
    ...
});
...
Run Code Online (Sandbox Code Playgroud)

但是现在编译器给了我以下错误信息:

error[E0507]: cannot move out of `sound_file`, a captured variable in an `FnMut` closure
  --> src/lib.rs:86:33
   |
83 |     let sound_file = File::open("beep.ogg").unwrap();
   |         ---------- captured outer variable …
Run Code Online (Sandbox Code Playgroud)

closures file move-semantics rust

2
推荐指数
1
解决办法
62
查看次数

标签 统计

closures ×1

file ×1

move-semantics ×1

rust ×1