Как стать автором
Обновить

Комментарии 2

Цикл for используется для итераций.

Итерация - это однократное исполнение тела цикла. Правильнее: Цикл for используется для итерирования (элементов контейнера).

который "пожирал" твою коллекция

Моя твоя не понимать.

Так что знак амперсанда - это итератор.

Знак амперсанда не имеет никакого отношения к трейтам итераторов. for x in y {…} рассахаривается в код, использющий IntoIterator::into_iter(y) и всё, что делает амперсанд — это для y: T превращает тип T в &T (т.е. в ссылку на T), что приводит к использованию другой реализации трейта IntoIterator. Для стандартных коллекций раньше были специальные исключения.

Вдаваясь в подробности реализации Rust-конструкции цикла for, следует отметить что она расширяется компилятором в вызов метода.

В таблице кратких форм и их эквивалентов ниже, никакой эквивалентности нет. Я вполне могу сделать коллекцию, у которой my_collection.iter() принимает &mut self, вообще не возвращает итератор или даже не существует, и for x in &my_collection будет работать, если я определю impl IntoIterator for &MyCollectionType и не будет, если я этого не определю.

.iter() и .iter_mut() — это функции, которые добавлены по соглашению, чтобы было можно писать collection.iter().map(…) вместо (&collection).into_iter().map(…).

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории