如果两个let Some(...)在同一条线上,而第二个let依赖于第一个let,这样的事情可能吗?

let Some(h) = socket.req_parts().headers.get("room"), let Some(room) = h.to_str() else {
    return;
};

此解决方案:

How to write multiple condition in if let statement?

建议使用元组,但当Second let依赖于First时,我不确定如何做到这一点.

推荐答案

您说得对,当依赖项通过函数调用时,您不能同时执行两个独立的依赖项let Some().在您的链接注释中,显示了与@个标识符相匹配的"依赖"示例:

if let Some(c @ Some(7)) = a

这是可行的,因为它在某种意义上相当于

if let Some(Some(7)) = a

增加了Some(7)c的绑定.在模式中,依赖关系在左侧表示.您不能将函数调用放在那里.

如果hroomNone,那么您想进入else子句,所以您可以改用Option.and_then,它接受返回Option的函数作为其参数,并且只将其应用于Some.这是最干净的,如果你只需要room:

let Some((h, room)) = socket
    .req_parts()
    .headers
    .get("room")
    .and_then(|h| h.to_str())

但是您也可以使用元组来获取roomh:

let Some((h, room)) = socket
    .req_parts()
    .headers
    .get("room")
    .and_then(|h| h.to_str().map(|room| (h, room)))

Rust相关问答推荐

如何最好地并行化修改同一Rust向量的多个切片的代码?

如何使用Match比较 struct 中的值

使用Clap时如何将String作为Into Str参数传递?

制作一片连续整数的惯用Rust 方法?

新创建的变量的绑定生存期

如何在 struct 的自定义序列化程序中使用serde序列化_WITH

通过RabbitMQ取消铁 rust 中长时间运行的人造丝任务的策略

更合理的方法来设计样条线函数器?

为什么 js_sys Promise::new 需要 FnMut?

使用 Option 来分配?

我可以用 Rust 编写一个不可变变量

存储返回 impl Trait 作为特征对象的函数

std::vector::shrink_to_fit 如何在 Rust 中工作?

在 Rust 中,我如何处理请求 javascript 的页面?

为什么我不能克隆可克隆构造函数的Vec?

无法把握借来的价值不够长寿,请解释

如何将切片推入数组?

你能用 Rust 和 winapi 制作 Windows 桌面应用程序吗?

相互调用的递归异步函数:检测到循环

如果参数为 Send,则返回 Future Send