Puedo imprimir en Debug
la siguiente matriz:
fn main() {
let array = [0; 5];
println!("{:?}", array);
}
Sin embargo, si el tamaño es más grande, digamos que es 50, el rasgo std::fmt::Debug
no será implementado por defecto:
fn main() {
let array = [0; 50];
println!("{:?}", array);
}
Error de compilación:
error [E0277]: el rasgo unido
[{integer}; 50]: std::fmt::Debug
no esta satisfecho
Porque es el std::fmt::Debug
¿Rasgo no implementado para algunos tamaños de arrays?
Respuestas
4 para la respuesta № 1De https://doc.rust-lang.org/std/primitive.array.html:
Arreglos de tamaños de 0 a 32 (inclusive) implementan lo siguiente rasgos si el tipo de elemento lo permite:
- Clon (solo si T: Copia)
- Depurar
- IntoIterator (implementado para & [T; N] y & mut [T; N])
- PartialEq, PartialOrd, Eq, Ord
- Picadillo
- AsRef, AsMut
- Pedir prestado
- Defecto
Esta limitación en el tamaño N existe porque RustTodavía no es compatible con el código que es genérico sobre el tamaño de un tipo de matriz. [Foo; 3] y [Bar; 3] son instancias de lo mismo tipo genérico [T; 3], pero [Foo; 3] y [Foo; 5] son completamente diferentes tipos Como recurso provisional, las implementaciones de rasgos se generan de forma estática. a la talla 32.
Las matrices de cualquier tamaño son Copiar si el tipo de elemento es Copiar. Esto funciona Porque el rasgo de Copia es especialmente conocido por el compilador.