Rust中的“..=”(点点等于)运算符是什么?

32

我在一些Rust代码中看到了这个..=运算符:

for s in 2..=9 {
    // some code here
}

它是什么?

1个回答

44

这是包含的范围操作符。

范围x..=y包含所有>= x<= y的值,即“从xy包括 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。)

另请参阅


8
可能需要补充一些细节,解释为什么这种新的语法是必要的,例如当 n == 255 时,0u8..(n+1)0u8..=n 之间的区别。 - mcarton
2
另外值得注意的是,a..=b 可以在匹配表达式模式中使用,但在该位置使用 a..b 是实验性的(exclusive_range_pattern)! - rodrigo
1
关于@mcarton的评论:https://dev59.com/aI7ea4cB1Zd3GeqPDZt3 - phimuemue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接