FFORGE//RS
← Маршрут

rust / УРОВЕНЬ 2

Ссылка, которая исчезла

ОЦЕНКА25 МИН
01

ТЕОРИЯ / ВОСПРОИЗВЕДЕНИЕ

Что нужно восстановить

  • Отличать перемещение изменяемой ссылки от её повторного заимствования
  • Использовать iter_mut без клонирования коллекции

Изменяемые ссылки не реализуют Copy

`&mut T` представляет эксклюзивный доступ. Передача такой ссылки по значению может переместить сам binding ссылки, хотя значение под ней остаётся заимствованным. Поэтому последующее использование того же binding может завершиться ошибкой E0382.

Повторно заимствуйте на минимальный полезный срок

Методы вроде `iter_mut()` создают новое, более короткое изменяемое заимствование. Итератор владеет этим временным заимствованием; после цикла исходный binding `&mut Vec<T>` снова доступен.

КОНТРОЛЬНАЯ ТОЧКА

Функция проходит по `accounts: &mut Vec<i64>`, а затем вызывает `accounts.push(100)`. Какой цикл сохраняет возможность вызвать `push` без клонирования?

ISOLATED RUST 1.96
src/lib.rsРЕДАКТИРОВАНИЕ

02 / ОТЛАДКА

Найдите и исправьте дефект

Исправьте `normalize`: обнулите отрицательные балансы и добавьте резервный аккаунт. Не клонируйте вектор и не меняйте сигнатуру функции.

Инициализация редактора…
ОБЛАЧНЫЙ SANDBOXсеть выключена · 256 МБ · 12 с
1 / 64 KB
ВЫВОД
Runner ждёт отправки кода.