我正在尝试通过在其中实现简单算法来欺骗Rust。我设法制作了一个通用的merge_sorted
,最终得到了以下签名:
fn merge_sorted<IL, ILL, I: Ord>(mut arrays: ILL) -> Vec<I>
where
IL: Iterator<Item = I>,
ILL: Iterator<Item = IL>,
{
// ...
}
这似乎是自己编译的。签名对我来说很有意义,因为该函数消耗了顶层迭代器,并且它也返回了所有迭代器。但是,我无法构造有效的值以传递给此函数:
fn main() {
let v1 = vec![1, 2];
let vectors = vec![v1.iter()];
merge_sorted(vectors.iter());
}
按预期,此示例中的vectors
具有以下类型:
std::vec::Vec<std::slice::Iter<'_, i32>>
这是我收到的错误消息:
error[E0277]: the trait bound `&std::slice::Iter<'_, {integer}>: std::iter::Iterator` is not satisfied
--> src\main.rs:58:5
|
58 | merge_sorted(vectors.iter());
| ^^^^^^^^^^^^ `&std::slice::Iter<'_, {integer}>` is not an iterator; maybe try calling `.iter()` or a similar method
|
= help: the trait `std::iter::Iterator` is not implemented for `&std::slice::Iter<'_, {integer}>`
note: required by `merge_sorted`
&
来自哪里?
答案 0 :(得分:2)
var currentDirectory = Directory.GetCurrentDirectory();
var driverService = ChromeDriverService.CreateDefaultService(currentDirectory);
driverService.Start();
var driver = new ChromeDriver(driverService);
借用其中包含的项目,因此您要遍历未实现Vec::iter
的借用迭代器(&std::slice::Iter
)。要使用矢量来拥有商品的所有权,必须调用Iterator
:
Vec::into_iter
您还可以要求使用fn main() {
let v1 = vec![1, 2];
let vectors = vec![v1.iter()]; // You can use `into_iter` there to iterate over ints.
merge_sorted(vectors.into_iter());
}
来简化API的使用:
IntoIterators