我可以在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
特征?
答案 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。这有效 因为复制特征是编译器特有的。