Jaki jest zalecany sposób deklarowania struktury zawierającej tablicę, a następnie utworzenia instancji inicjowanej zerowo?Jak zainicjować strukturę zawierającą tablicę w Rust?
Oto struct:
use std::default::Default;
use std::num;
#[deriving(Default)]
struct Histogram {
sum: u32,
bins: [u32, ..256],
}
a błąd kompilatora:
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
Jeśli próbuję dodać brakujące inicjator na tablicy uint8:
impl Default for [u32,..256] {
fn default() -> [u32,..255]{
[0u8,..256]
}
}
otrzymuję :
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 }
Czy robię coś nie tak, czy też jestem ukąszony przez odejście w standardowej bibliotece dla typów liczbowych na drodze do 1.0?
$ rustc --version
rustc 0.13.0-nightly
Mam tylko ustawienie domyślne, ponieważ zero jest oznaczone jako przestarzałe w standardowej bibliotece. W przypadku braku cechy zerowej argumentowałbym, że macierze o stałych rozmiarach są częściej używane w wektorach wektorowych niż cokolwiek innego, a wektor zerowy jest wektorem tożsamości dla dodawania i jest bardziej naturalnym wyborem dla domyślnych . Ale to jest poważny motocykl, który tutaj robimy :) –