我在一些Rust代码中看到了这个..=
运算符:
for s in 2..=9 {
// some code here
}
它是什么?
这是包含的范围操作符。
范围x..=y
包含所有>= x
和<= y
的值,即“从x
到y
(包括 y
)”。
相比之下,不包括的范围操作符是x..y
,它不包括y
本身。
fn main() {
println!("{:?}", (10..20) .collect::<Vec<_>>());
println!("{:?}", (10..=20).collect::<Vec<_>>());
}
// Output:
//
// [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
// [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
在 match
表达式中,您还可以使用 start..=end
作为模式来匹配范围内的任何值(包括边界值)。
match fahrenheit_temperature {
70..=89 => println!("What lovely weather!"),
_ => println!("Ugh, I'm staying in."),
}
(使用一个独占的范围start..end
作为模式是一个实验性特性。)
包含范围曾经是一个仅限于夜间实验性特性,并在之前写成...
。
自Rust 1.26起,它已正式成为该语言的一部分,并被写成..=
。
(在包含范围存在之前,您实际上无法创建一个字节值范围,例如包括255u8
的范围。因为那将是0..256
,而256
超出了u8
范围!这是问题#23635。)
n == 255
时,0u8..(n+1)
和0u8..=n
之间的区别。 - mcartona..=b
可以在匹配表达式模式中使用,但在该位置使用a..b
是实验性的(exclusive_range_pattern
)! - rodrigo