为什么“大”数组没有实现std :: fmt :: Debug?

时间:2016-12-15 11:09:53

标签: rust

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

fn main() {
    let array = [0; 5];
    println!("{:?}", array);
}

但是,如果大小更大,假设它是50,则默认情况下不会实现特征std::fmt::Debug

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

编译错误:

  

错误[E0277]:不满足特征限制[{integer}; 50]: std::fmt::Debug

为什么某些大小的数组没有实现std::fmt::Debug特征?

1 个答案:

答案 0 :(得分:5)

来自https://doc.rust-lang.org/std/primitive.array.html

  

大小从0到32(含)的数组实现以下内容   如果元素类型允许,则为traits:

     
      
  • 克隆(仅限T:复制)
  •   
  • 调试
  •   
  • IntoIterator(为& [T; N]和& mut [T; N]实施)
  •   
  • PartialEq,PartialOrd,Eq,Ord
  •   
  • 哈希
  •   
  • AsRef,AsMut
  •   
  • Borrow,BorrowMut
  •   
  • 默认
  •   
     

这种尺寸限制   N存在是因为Rust还不支持通用的代码   数组类型的大小。 [美孚; 3]和[Bar; 3]是相同的实例   泛型[T; 3],但是[Foo; 3]和[Foo; 5]完全不同   类型。作为权宜之计,特征实现是静态生成的   大小为32。

     

如果元素类型为Copy,则任意大小的数组都是Copy。这有效   因为复制特征是编译器特有的。