【发布时间】:2021-05-14 12:15:03
【问题描述】:
我想将&[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 签名的情况下完成这项工作?
【问题讨论】: