/ / ¿Por qué las matrices "grandes" no implementan std :: fmt :: Debug? [duplicado] - óxido

¿Por qué las matrices "grandes" no implementan std :: fmt :: Debug? [duplicado] - óxido

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 № 1

De 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.