为什么会这样编译:
fn main() {
let xs = [||1, ||2, ||3];
}
but 才不是?
fn main() {
let xs = [(||1, 1), (||2, 2), (||3, 3)] ;
}
编辑:要明确的是,问题不是为什么它不编译. It is 这两个之间有什么区别,第一个可以编译,但第二个却不能?.
第一种情况是编译器中的特殊情况:当某些类型需要统一时(例如当所有类型都是同一个数组的元素时),并且所有类型都是非捕获闭包时,编译器会自动将它们强制转换为函数指针。但是,如果它们是包含非捕获闭包的元组,则这不起作用。
rustc中的相关代码在这里 https://github.com/rust-lang/rust/blob/d7dd01fe8b071602510eaac9f676acc0e3cf8e4a/compiler/rustc_hir_analysis/src/check/coercion.rs#L1116-L1210,如果你有兴趣的话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)