Wie wird empfohlen, eine Struktur zu deklarieren, die ein Array enthält, und dann eine nullinitialisierte Instanz zu erstellen? HierWie initialisiert man eine Struktur, die ein Array in Rust enthält?
ist die Struktur:
use std::default::Default;
use std::num;
#[deriving(Default)]
struct Histogram {
sum: u32,
bins: [u32, ..256],
}
und der Compiler-Fehler:
src/lib.rs:17:5: 17:23 error: the trait `core::default::Default` is not implemented for the type `[u32, ..256]`
src/lib.rs:17 bins: [u32, ..256],
^~~~~~~~~~~~~~~~~~
note: in expansion of #[deriving]
src/lib.rs:14:1: 14:21 note: expansion site
src/lib.rs:17:5: 17:23 note: the trait `core::default::Default` must be implemented because it is required by `core::default::Default::default`
src/lib.rs:17 bins: [u32, ..256],
^~~~~~~~~~~~~~~~~~
note: in expansion of #[deriving]
src/lib.rs:14:1: 14:21 note: expansion site
error: aborting due to previous error
Wenn ich die fehlende Initialisierung für die uint8 Array hinzuzufügen versuchen:
impl Default for [u32,..256] {
fn default() -> [u32,..255]{
[0u8,..256]
}
}
ich :
src/lib.rs:20:1: 24:2 error: cannot provide an extension implementation where both trait and type are not defined in this crate [E0117]
src/lib.rs:20 impl Default for [u32,..256] {
src/lib.rs:21 fn default() -> [u32,..255]{
src/lib.rs:22 [0u8,..256]
src/lib.rs:23 }
src/lib.rs:24 }
Mache ich etwas falsch, oder werde ich von Abwanderung in der Standardbibliothek für numerische Typen auf dem Weg zu 1.0 gebissen?
$ rustc --version
rustc 0.13.0-nightly
Ich bekam nur auf Standard, weil Zero in der Standardbibliothek als veraltet gekennzeichnet ist. In Ermangelung eines ~ Null-Merkmals würde ich argumentieren, dass Arrays mit fester Größe eher in der Vektorvektoraddition verwendet werden als alles andere, und der Nullvektor ist der Identitätsvektor für die Addition und ist eine natürlichere Wahl für den Standard . Aber das ist etwas ernstes Bikeshedding, das wir hier machen :) –