范围文字和范围模式(例如,`...` 和`..=` 之间)有什么区别?

Jav*_*kha 7 rust

Rust Book的Operators and Symbols附录列出了两个都是右包含范围的运算符:

操作员 例子 解释
..= ..=expr, expr..=expr 包含右侧的范围字面量
... expr...expr 在模式中:包含范围模式

这两个运营商有什么区别?或者,换种说法,范围文字和范围模式之间有什么区别?

'In a pattern' 表示expr...expr必须在匹配表达式中使用,expr..=expr而不应该使用。为什么是这样?

She*_*ter 8

图案是什么,可以用来测试一个值是否一定的形状。甲字面是一块创建一个值的源代码。出于可发现性的目的,一些文字和模式看起来彼此相似,以表明它们之间的关系。

Rust 1.0 允许...在模式中使用,因此为了向后兼容,今天仍然允许使用该语法:

match 42 {
    1...100 => println!("Just right"),
    _ => println!("No good"),
}
Run Code Online (Sandbox Code Playgroud)

然而,Rust 1.0 并没有稳定使用...作为字面量。经过多次自行车修理后,我们认为这..=是包含范围内更好的语法。该语法在 Rust 1.26 中被稳定为文字,并且它也被添加为模式。

新代码应该更喜欢..=模式。编译器甚至建议更新...in 模式的用法:

warning: `...` range patterns are deprecated
 --> src/main.rs:3:10
  |
3 |         1...100 => println!("Just right"),
  |          ^^^ help: use `..=` for an inclusive range
  |
Run Code Online (Sandbox Code Playgroud)

建议,这一警告将在2021年版的错误。

可以更新文档以表明..=也可以在模式中使用并且是....

也可以看看: