@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`

Где& родом из?

Ответы на вопрос(1)

Ваш ответ на вопрос