Что такое оператор... = (точка точка равен) в Rust?

Я видел этот оператор ..= в некотором коде Rust:

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

Что это?

Ответ 1

Это оператор инклюзивного диапазона.

Диапазон x..=y содержит все значения >= x и <= y, то есть "от x до 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]

Выражения соответствия

Кроме того, можно использовать start..=end в качестве образца в match выражения, чтобы соответствовать любому значению в (включительно) диапазона.

match fahrenheit_temperature {
    70..=89  => println!("What lovely weather!"),
    _        => println!("Ugh, I'm staying in."),
}

(Использование исключительного start..end диапазона... start..end как образец - экспериментальная особенность.)

история

Инклюзивные диапазоны были экспериментальной функцией только для ночи, и были написаны ... раньше.

Начиная с Rust 1.26, это официально часть языка и написано ..=.

(До того как существовали инклюзивные диапазоны, вы, на самом деле, не могли создать, скажем, диапазон байтовых значений, включая 255u8. Потому что это было бы 0..256, а 256 выходит за u8 диапазона u8 ! Это проблема # 23635.)

Смотрите также