如何在 if 主体中使用变量而不在 Rust 中删除它?

问题描述 投票:0回答:1

我正在初始化一个结构,然后将结果返回到变量,然后,如果结果正常,我想在该变量上启动一个线程,而不是随后删除它,因为这也会删除并停止线程。

let tcp_server: Result<TcpServer> = TcpServer::new(
    settings.server.ip.clone(),
    &settings.http,
    request_handler.clone(),
);
if tcp_server.is_ok() {
    tcp_server.unwrap().start_thread();
    // tcp_server is dropped here
}

IpcListener::new().listen_block();  // Block the main thread

// I want it to be dropped here

有没有什么方法可以在结果包装的 tcp_server 上启动线程,只有在结果正常而不改变其范围的情况下,或者会有什么替代方案?

multithreading if-statement rust scope
1个回答
0
投票

您的代码显然不完整,因为它不可能工作。但是,如果您想保留条件语句末尾可能存在或不存在的内容,您可以使用

Option
:

let _server = if tcp_server.is_ok() {
    tcp_server.start_thread();
    // tcp_server is dropped here
    Some(tcp_server)
} else { None }

IpcListener::new().listen_block();

仅当

tcp_server
被丢弃时,
_server
才会被丢弃。如果服务器从未存在过,则选项将为
None
,并且当
_server
被删除时,不会删除任何内容。

© www.soinside.com 2019 - 2024. All rights reserved.