当 Rust 中的范围反转时会发生什么?

lij*_*952 2 rust

在 Rust 中,此代码可以编译并运行,但不会生成错误或输出:

fn main() {
    for number in 4..1 {
        println!("{}!", number);
    }
}
Run Code Online (Sandbox Code Playgroud)

Rust 是否应该将其视为无效代码而不编译或发出警告,因为它似乎也不理解我想要反向迭代?

此代码不生成汇编输出。

Fin*_*nis 5

让我们看看内部发生了什么。

4..1
Run Code Online (Sandbox Code Playgroud)

实际上只是语法糖

std::ops::Range { start: 4, end: 1 }
Run Code Online (Sandbox Code Playgroud)

定义为

范围 start..end 包含 start <= x < end 的所有值。如果 start >= end 则为空。

因此,正如文档中所指定的,for 4..1不应该执行任何操作,因为它总是向前迭代并且开始已经超过结束。

要向后迭代,请使用:

(1..4).rev()
Run Code Online (Sandbox Code Playgroud)

  • @VincentSavard 可能是。不确定该怎么办。老实说,如果你看看“范围”的定义,我认为这是不言自明的。 (2认同)