2016-09-12 2 views
-1

저는 Rust의 초보자이며 u8 또는 &u8의 반복자를 사용하여 일부 청크를 출력하는 어댑터를 구현하려고합니다.녹이기 사용자 정의 어댑터 및 제네릭

내 프로그램을 컴파일하는 방법을 모르겠다. 나는 ends_with_separator()을 사용하지 않고 어댑터를 만들었지 만, 이터레이터 유형에 제약이없는 것은 아니지만 이제는 u8 또는 &u8의 반복자 만 받아들이도록 어댑터를 정의해야하며 어떻게해야할지 모르겠다.

내가 답을 발견
pub struct Chunk<T> { 
    pub data: Vec<T>, 
} 

pub struct Chunker<I> { 
    pub iter: I, 
} 

impl<I> Chunker<I> { 
    fn ends_with_separator(buf: &Vec<u8>) -> bool { 
     match buf.last() { 
      Some(v) => v % 7 == 0, 
      None => true, 
     } 
    } 
} 

impl<I: Iterator> Iterator for Chunker<I> { 
    type Item = Chunk<I::Item>; 

    #[inline] 
    fn next(&mut self) -> Option<Self::Item> { 
     let mut buf = Vec::new(); 
     while let Some(v) = self.iter.next() { 
      buf.push(v); 
      if Self::ends_with_separator(&buf) { 
       return Some(Chunk { data: buf }); 
      } 
     } 
     None 
    } 
} 

fn main() { 
    let chunker = Chunker { iter: (0u8..10) }; 
    for chunk in chunker { 
     println!("{:?}", chunk.data); 
    } 
} 

답변

1

, 내 문제는 순전히 syntaxic이었다. "나는 내 프로그램 컴파일을하는 방법을 모른다"

impl<I: Iterator<Item=u8>> Iterator for Chunker<I>

+3

다음에 당신이 한 문제 : 1) 감소 동일한 오류를 나타내는 가장 작은 예제 코드, 2) * 오류를 제공하십시오. – mcarton

+0

이것은 이미 프로그램의 작은 버전입니다. 내 문제는 올바른 구문을 사용하여 "무언가를하는 방법"과 더 비슷했습니다. 여기에 실제로 이해가되지 않았기 때문에 오류 메시지가 표시되지 않았습니다. – Vincent

관련 문제