此错误消息是否表示我可以在for循环中使用模式匹配?

地球引擎

我不希望以下代码起作用,但是作为语法探索的一部分,我在操场上尝试了

fn main() {
    struct EOF {};
    let lines = vec![Ok("line 1"), Ok("line 2"), Err(EOF {})];
    for Ok(line) in lines {
        println!("{}", line);
    }
}

错误消息是

error[E0005]: refutable pattern in `for` loop binding: `Err(_)` not covered
 --> src/main.rs:4:9
  |
4 |     for Ok(line) in lines {
  |         ^^^^^^^^ pattern `Err(_)` not covered

根据上面的消息,看来我只需要为Err案件添加一个火柴臂但是,这样做的正确语法是什么?

特伦特

您可以将模式用作for循环中的绑定,但不能使用可重复使用的模式。这里描述了可重用和不可重用模式之间的区别,但是要点是,如果模式可能失败,则不能在let语句或for循环中使用它如果某个模式不能失败,那么您(当前)不能在if let或中使用它while let此后一个版本可能会在将来的版本中更改为发出警告而不是失败。)

for循环中使用不可辩驳的模式的示例可能是这样的:

let mut numbers = HashMap::new();
numbers.insert("one", 1);
numbers.insert("two", 2);
numbers.insert("three", 3);

for (name, number) in &numbers {
    println!("{}: {}", name, number);
}

(name, number)是一个不可辩驳的模式,因为在任何类型的地方检查,它都会匹配。之所以在这里进行类型检查,是因为要迭代的项(由IntoIteratorfor的实现定义&HashMap)是元组。您也可以将以上内容写为

for tuple in &numbers {
    let (name, number) = tuple;
    println!("{}: {}", name, number);
}

因为let是另一个只允许使用不可辩驳的模式的地方。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以在嵌套循环中使用 random.choice()?

我可以在vuejs循环中使用slot吗?

我可以在C ++中的for循环中使用指针吗?

我可以不在循环中使用调度组吗?

我可以在for循环中使用bash括号扩展吗?

我可以在for循环中使用with语句吗?

我可以在 foreach 循环中使用 eloquent 模型吗

我可以在 for 循环中使用 if 语句吗

是否可以在“ while let”中使用模式匹配防护?

是否可以在模式匹配分支中使用语句?

在PHP中的for循环中使用模式

在for循环中使用构建器模式

如何在嵌套数组的 Swift for 循环中使用模式匹配

有人可以解释为什么在直到循环中使用此Ruby吗?

可以在for循环中使用lambda吗?

我可以在一个循环中使用多个 for 循环吗?

我可以在一个循环中使用2个循环语句吗?

为什么我们可以在 if 循环中使用分号,而在 while 循环中不能使用分号

在for循环中使用Sklearn的LabelEncoder错误

Swift for循环中的模式匹配

在我的循环中使用UPDATE吗?

是否可以在使用await的功能块中存在的for循环中使用await?

是否可以在php for循环中使用LAST_INSERT_ID()?

是否可以在FOR循环中使用“找不到时”处理程序

有关重构Scala的建议-是否可以消除在foreach循环中使用的var

是否可以在Java循环中使用Thread.sleep()定期执行某些操作?

是否可以在终端命令模板循环中使用&&运算符?

朱莉娅-是否可以在for循环中使用进度条和Threads。@ threads?

是否可以从 for 循环中使用 Alpine.js 在 img 中的 src 中注入变量?