💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 5 тематическим шкалам и подробные объяснения.
Вопрос 3 из 25
Что нужно изменить вокруг `String::from`, чтобы устранить первопричину?
Rust Rust · Ограничения трейтов Копировать
fn duplicate<T: Clone>(value: &T) -> (T, T) {
(value.clone(), value.clone())
}
let pair = duplicate(&String::from("x"));
Заменить текущую форму `duplicate` на `Box<dyn Trait>` во всех местах, не проверяя владение, объектобезопасность и стоимость вызова.
Добавить Clone ко всем trait bounds, даже если реализация использует только ссылки. При каждом таком вызове появляется отдельный владелец и оплачивается копирование данных. Тогда различия между обычным и граничным случаем для `duplicate` исчезли бы.
Клонировать захваченное состояние перед каждым вызовом `duplicate`, не уточняя требуемый трейт вызова или время жизни.
Требовать только те трейты, которые реально использует функция; не добавлять Copy ради удобства, если Clone или заимствование точнее отражают стоимость.
Продублировать реализацию для каждого известного типа вокруг `duplicate`, вместо того чтобы исправить границы обобщения «Ограничения трейтов».
Вопрос 22 из 25
Как изменить фрагмент с `mathlib::square`, не перенося ошибку на время выполнения?
Rust Rust · Тестирование и инструменты Cargo Копировать
/// Возвращает квадрат.
///
/// ```
/// assert_eq!(mathlib::square(4), 16);
/// ```
pub fn square(x: i32) -> i32 { x * x }
Для публичного трейта сочетать модульные тесты реализаций, интеграционные тесты внешнего API и doctest-примеры, которые импортируют crate как пользователь.
Заменить текущую форму `mathlib::square` на `Box<dyn Trait>` во всех местах, не проверяя владение, объектобезопасность и стоимость вызова.
Клонировать захваченное состояние перед каждым вызовом `mathlib::square`, не уточняя требуемый трейт вызова или время жизни.
Продублировать реализацию для каждого известного типа вокруг `mathlib::square`, вместо того чтобы исправить границы обобщения «Тестирование и инструменты Cargo».
Добавить Clone ко всем trait bounds, даже если реализация использует только ссылки. При каждом таком вызове появляется отдельный владелец и оплачивается копирование данных. Следовательно, для `square` не понадобилось бы явное предусловие.