@trentcl Я просто тренируюсь писать короткие отрывки.
аюсь обмануть 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`
Где&
родом из?