如何将 &[u8] 转换为 impl 迭代器<Item = u8>?



我想把&[u8]传递给一个接受u8迭代器的函数:

fn f(words: &[u8]) {
g(words.iter())
}
fn g(words: impl Iterator<Item = u8>) {
//
}

游乐场

以上内容不起作用。错误提示:

error[E0271]: type mismatch resolving `<std::slice::Iter<'_, u8> as Iterator>::Item == u8`
--> src/lib.rs:3:5
|
3 |     g(words.iter())
|     ^ expected `u8`, found reference
...
6 | fn g(words: impl Iterator<Item = u8>) {
|                           --------- required by this bound in `g`
|
= note:   expected type `u8`
found reference `&u8`

这是因为迭代器被实现为传递引用,而不是传递值。有没有办法在不改变g签名的情况下使其工作?

您需要数据的自有版本u8,而不是迭代器返回的&u8

对迭代器使用cloned:

fn f(words: &[u8]) {
g(words.iter().cloned())
}

游乐场

最新更新