我想把&[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())
}
游乐场