我在dtolnay的令人费解的 Rust quiz中发现了一些奇怪的Rust代码。显然,这是一个有效的Rust程序(playground):
fn main() {
if return { print!("1") } {}
}
根据Rust文档:
if表达式的语法是一个条件操作数,后跟一个结果块,任意数量的else if条件和块,以及可选的尾随else块。条件操作数必须具有布尔类型。 对我来说,这意味着
return
语句必须以某种方式评估为布尔值,否则代码将无法编译。但是,这种解释似乎很荒谬,我怀疑还有其他事情发生了。那么为什么
if return
会编译呢?
return
表达式的类型是!
,它可以被强制转换为任何类型(在这种情况下,是布尔类型)。 - eggyal