-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)削減をあなたのコードは、同じエラーを示す最小の例に2)*エラーを与える*。 – mcarton
これは既にプログラムの小さなバージョンです。私の問題は、正しい構文を使用して「何かをする方法」に似ていました。 ここで実際には意味がないため、エラーメッセージは表示されませんでした。 – Vincent