Rust “为什么?”;“大的”;阵列未实现std::fmt::调试?

Rust “为什么?”;“大的”;阵列未实现std::fmt::调试?,rust,Rust,我可以在Debug中打印以下数组: fn main() { let array = [0; 5]; println!("{:?}", array); } 但是,如果大小更大,比如说50,traitstd::fmt::Debug默认情况下不会实现: fn main() { let array = [0; 50]; println!("{:?}", array); } 编译错误: 错误[E0277]:未满足特性绑定的[{integer};50]:std::fmt:

我可以在
Debug
中打印以下数组:

fn main() {
    let array = [0; 5];
    println!("{:?}", array);
}
但是,如果大小更大,比如说50,trait
std::fmt::Debug
默认情况下不会实现:

fn main() {
    let array = [0; 50];
    println!("{:?}", array);
}
编译错误:

错误[E0277]:未满足特性绑定的
[{integer};50]:std::fmt::Debug

为什么对某些大小的阵列没有实现
std::fmt::Debug
特性?

来自:

大小从0到32(含)的数组实现以下功能 特征(如果元素类型允许):

  • 克隆(仅当T:Copy时)
  • 调试
  • IntoIterator(为&[T;N]和&mut[T;N]实现)
  • PartialEq,PartialOrd,Eq,Ord
  • 散列
  • AsRef,AsMut
  • 违约
这是对尺寸的限制 N的存在是因为Rust还不支持泛型代码 数组类型的大小。[Foo;3]和[Bar;3]是相同的实例 泛型类型[T;3],但[Foo;3]和[Foo;5]完全不同 类型。作为权宜之计,trait实现是静态生成的 32码

如果元素类型为Copy,则任何大小的数组都是Copy。这很有效 因为复制特性是编译器特别知道的


我希望2017年将是积分通用参数的一年(我真的希望它不仅仅是积分,但积分已经非常有用了)。对于跟踪问题。它越来越近了。还有人说要更快地实现通用数组,看一年过去了。在当前的rust版本中,定义已更改为“任何大小的数组在元素类型允许的情况下实现以下特性:Debug、IntoIterator(为&[T;N]和&mut[T;N]实现),PartialEq,PartialOrd,Eq,Ord,Hash,AsRef,AsMut,Borrow,BorrowMut“,只有默认特征仍然限于32个元素数组。作为临时解决方法,您可以使用
&[T]
,因为它与长度无关。