我可以打印Debug以下数组:
fn main() {
let array = [0; 5];
println!("{:?}", array);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果大小更大,假设它是50,则std::fmt::Debug默认情况下不会实现该特征:
fn main() {
let array = [0; 50];
println!("{:?}", array);
}
Run Code Online (Sandbox Code Playgroud)
编译错误:
错误[E0277]:
[{integer}; 50]: std::fmt::Debug不满足特征限制
为什么std::fmt::Debug某些大小的数组没有实现这种特性?
来自https://doc.rust-lang.org/std/primitive.array.html:
如果元素类型允许,则大小为0到32(包括)的数组实现以下特征:
- 克隆(仅限T:复制)
- 调试
- IntoIterator(为&[T; N]和&mut [T; N]实现)
- PartialEq,PartialOrd,Eq,Ord
- 哈希
- AsRef,AsMut
- 借,BorrowMut
- 默认
对大小N的这种限制是存在的,因为Rust还不支持在数组类型大小上通用的代码.[美孚; 3]和[Bar; 3]是相同通用类型的实例[T; 3],但是[Foo; 3]和[Foo; 5]是完全不同的类型.作为权宜之计,特征实现是静态生成的,大小为32.
如果元素类型为Copy,则任何大小的数组都是Copy.这是有效的,因为编译器特别知道复制特征.
| 归档时间: |
|
| 查看次数: |
768 次 |
| 最近记录: |