相关疑难解决方法(0)

Rust Lang:“if let Some(x) = x”在做什么?

我正在开发几年前编写的 Rust 项目,并且遇到了这段代码,其字面意思是:

let mut values = vec![];
for x in maybe_values {
    if let Some(x) = x {
        values.push(Arc::new(x));
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道“if let”引入了模式匹配 if (这似乎是对关键字“let”的糟糕重用,但我会克服这一点 - 如果有人可以帮助我用心理助记符来理解“让”在这里,请这样做!)。

但测试在Some(x) = x做什么?

从我的测试来看,这似乎是一个技巧/习惯用法:a) 测试循环变量“x”是 Some(),b) 最终得到 x 中的 unwrap()ped 值。

但我无法向自己完全解释它,也无法在任何地方找到关于这是一个习语的参考。

希望你能帮助我的 Rust 教育之路。谢谢。

rust

24
推荐指数
2
解决办法
2万
查看次数

Rust 中 if 和 if-let 的主要区别

我不明白我们使用的原因if let,只是通常的if. 在 Rust 书的第 6.3 章中,示例代码如下:

let some_u8_value = Some(0u8);
if let Some(3) = some_u8_value {
    println!("three");
}
Run Code Online (Sandbox Code Playgroud)

上面的代码与:

let some_u8_value = Some(0u8);
if Some(3) == some_u8_value {
    println!("three");
}
Run Code Online (Sandbox Code Playgroud)

关于我们为什么要使用if let它或它专门用于什么的任何其他原因?

rust

12
推荐指数
2
解决办法
2674
查看次数

如果让表达式,如何“阅读”?

在 Rust 中,您可以在解包时使用if let而不是match直接使用一个简单的值。

所以代替

match opt_val {
    Some(x) => {
        do_something_with(x);
    }
    _ => {}
}
Run Code Online (Sandbox Code Playgroud)

你可以做

if let Some(x) = opt_val {
    do_something_with(x);
}
Run Code Online (Sandbox Code Playgroud)

我应该如何在心理上阅读处理这段代码?对于match,这很简单:“如果opt_val匹配Some(x),然后做......用x”。

因为if let我总是觉得这是错误的方式:“如果Some(x)匹配(?)opt_val,那么做......”。请注意,let这句话中没有。

这没什么大不了的,但我继续绊倒这个。


我真的很喜欢“如果这让绑定成功,那么...... ”来自接受的答案,因为我认为它设置了正确的焦点。过多地关注模式匹配首先让我陷入了这个“问题”。作为参考,(IR)可反驳和let讨论这里的锈的书。

syntax pattern-matching rust

4
推荐指数
1
解决办法
125
查看次数

标签 统计

rust ×3

pattern-matching ×1

syntax ×1