提问人:mes3n 提问时间:11/7/2023 最后编辑:mes3n 更新时间:11/7/2023 访问量:89
如何在 if body 中使用变量而不在 Rust 中丢弃它?
How to use variable in if body without dropping it after in Rust?
问:
我正在初始化一个结构,然后将结果返回给一个变量,如果结果为 Ok,我想在这个变量上启动一个线程,而不会随后删除它,因为它也会丢弃并停止线程。
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上启动线程,前提是结果没问题而不改变其范围,或者有什么替代方案?
答:
0赞
mousetail
11/7/2023
#1
你的代码显然是不完整的,因为它不可能工作。但是,如果要在条件语句末尾保留可能存在或不存在的内容,则可以使用 :Option
let _server = if let Ok(tcp_server) = tcp_server { // use if let to replace unwrap
tcp_server.start_thread();
// tcp_server is dropped here
Some(tcp_server)
} else { None }
IpcListener::new().listen_block();
只有在删除时才会被丢弃。如果服务器从未存在过,则该选项将存在,并且在删除时不会删除任何内容。tcp_server
_server
None
_server
评论
0赞
mes3n
11/7/2023
谢谢,这个解决方案可能是最好的方法。但是是否需要将变量传回 if 主体的范围,或者是否有任何方法可以在不将其移动到该主体的情况下使用if 主体中的变量?tcp_server
0赞
mousetail
11/7/2023
在身体中使用它永远不会将其移动到身体中if
0赞
mes3n
11/7/2023
但是,如果变量从未被移动到体内,为什么它会被丢弃在体内呢?您的解决方案不是简单地将其移入主体,然后将其移回变量吗?if
if
_server
0赞
mousetail
11/7/2023
@mes3n 该方法可能会移动 if 作为参数而不是 .start_thread
tcp_server
self
&self
1赞
Sven Marnach
11/8/2023
如果 OP 使用 ,原始问题就会消失,这可能是他们真正想要的。let tcp_server = TcpServer::new(...)?
评论
TcpServer::new
TcpServer
start_thread
tcp_server
tcp_server
Result<TcpServer
Result
Result
start_thread()
tcp_server
if
start_thread()
tcp_server
if
tcp_server
start_server()
TcpServer
TcpServer
start_thread
handle
start_thread