2014-11-21 3 views
6

배열을 포함하는 구조체를 선언하고 초기화되지 않은 인스턴스를 만드는 것이 좋습니다.녹에서 배열을 포함하는 구조체를 초기화하는 방법은 무엇입니까?

use std::default::Default; 
use std::num; 

#[deriving(Default)] 
struct Histogram { 
    sum: u32, 
    bins: [u32, ..256], 
} 

컴파일러 오류 : 여기

는 구조체이다

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 

나는 UINT8 배열에 대해 누락 된 이니셜을 추가하려고하면 :

impl Default for [u32,..256] { 
    fn default() -> [u32,..255]{ 
     [0u8,..256] 
    } 
} 

내가 얻을 :

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 } 

나는 잘못된 것을하고 있습니까? 아니면 1.0에 이르는 숫자 형에 대한 표준 라이브러리에서 휘젓니까? 이 비 형 다형성이 없기 때문에 같은 Default이 크기의 소수에서만 구현 가능한대로

$ rustc --version 
rustc 0.13.0-nightly 

답변

3

녹, 모든 배열에 대한 Default를 구현하지 않습니다.

impl Default for Histogram { 
    fn default() -> Histogram { 
     Histogram { 
      sum: 0, 
      bins: [0u32, ..256], 
     } 
    } 
} 

참고 :

당신은, 그러나, 당신의 유형의 기본을 구현할 수 I, 즉 u32에 대한 Default로 시작하는 비린내 구현 이유 0하지 1을 주장 것인가? 또는 42? 좋은 답변이 없으므로 분명한 기본값은 없습니다.

+0

표준 라이브러리에서는 0이 사용되지 않음으로 표시되어 있기 때문에 기본값에 도달했습니다. ~ Zero 특성이 없으면 고정 크기 배열이 벡터 벡터 추가에 사용될 가능성이 더 높고 제로 벡터가 더하기에 대한 식별 벡터이며 기본으로 더 자연스러운 선택이라고 주장합니다. . 그러나 이것은 우리가 여기에서하고있는 심각한 자전거 타기입니다 : –

3

나는, 당신이 당신의 구조를 직접 Default를 구현해야합니다이 작업을 수행 할 수 없습니다 두려워 : 더 고정 문제처럼,

struct Histogram { 
    sum: u32, 
    bins: [u32, ..256], 
} 

impl Default for Histogram { 
    #[inline] 
    fn default() -> Histogram { 
     Histogram { sum: 0, bins: [0, ..256] } 
    } 
} 

숫자 유형이 경우와는 아무 상관이 없다 - 크기 배열. 이런 종류의 것들을 기본적으로 지원하기 위해서는 여전히 숫자 리터럴이 필요합니다.

+0

Thanks Vladimir! Matthieu는 똑같은 대답을 더 빨리 주었지만, 당신은 인라인을 가지고 있습니다. 내가 할 수 있으면 둘 다 받아 들일거야! –

+0

그래, 다른 응답이 나타 났을 때 제출 버튼을 눌렀습니다 :) 괜찮습니다. 모든 것이 공평합니다. :) –

2

이 0으로 모든 필드를 초기화해야합니다 경우,이