2016-09-12 12 views
-1

私はRustの初心者です。u8または&u8というイテレーターを入力として使用し、いくつかのチャンクを出力するアダプターを実装したいと考えています。Rustカスタムアダプターとジェネリック

私のプログラムをコンパイルする方法がわかりません。私は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

関連する問題