在 Rust 中,此代码可以编译并运行,但不会生成错误或输出:
fn main() {
for number in 4..1 {
println!("{}!", number);
}
}
Run Code Online (Sandbox Code Playgroud)
Rust 是否应该将其视为无效代码而不编译或发出警告,因为它似乎也不理解我想要反向迭代?
此代码不生成汇编输出。
让我们看看内部发生了什么。
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)