首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从闭包中传播错误?(铁锈,温特箱子的事件循环)

如何从闭包中传播错误?(铁锈,温特箱子的事件循环)
EN

Stack Overflow用户
提问于 2021-06-22 10:15:01
回答 1查看 337关注 0票数 0

"this_function_returns_error“返回结果,我需要将其传播回main。run函数的签名:https://docs.rs/winit/0.25.0/winit/event_loop/struct.EventLoop.html#method.run

我需要的简单例子是:

代码语言:javascript
复制
use winit::{
    event::{Event, WindowEvent},
    event_loop::{ControlFlow, EventLoop},
    window::WindowBuilder,
};

fn main() -> Result<(), SomeError> {
    let event_loop = EventLoop::new();
    let window = WindowBuilder::new().build(&event_loop).unwrap();

    event_loop.run(move |event, _, control_flow| {
        *control_flow = ControlFlow::Wait;

        match event {
            Event::WindowEvent {
                event: WindowEvent::CloseRequested,
                window_id,
            } if window_id == window.id() => *control_flow = ControlFlow::Exit,
            _ => (),
        }
        this_function_returns_error()?;
    });
}

编译器指出:

在run方法中闭包的位置:此函数应返回ResultOption以接受?

但是我不确定我是否能够返回这个闭包的结果,因为它是winit函数的参数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-22 10:29:12

,我不确定是否能够返回这个闭包的结果,因为它是winit函数的参数。

不,不能,事件循环处理程序的类型是:

代码语言:javascript
复制
FnMut(Event<'_, T>, &EventLoopWindowTarget<T>, &mut ControlFlow)

里面没有返回值。

不仅如此,还键入了事件循环运行程序:

代码语言:javascript
复制
pub fn run<F>(self, event_handler: F) -> !

-> !意味着它永远不会返回。

它将退出,但我假设它直接终止了当前进程,因为它的类型注释清楚地表明,它永远不会返回对封闭的main的控制。

事实上,这正是每个实现似乎都要做的:它们运行底层事件循环,如果终止,它们只需运行::std::process::exit(0);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68081717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档