Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpLfSt 30 of 288 menu
◀ ▶

Структура с полем-ссылкой в Rust

Когда структура хранит не копию текста, а ссылку на него, срок жизни поля должен быть виден в типе. Пометку пишут рядом с именем структуры, а поле получает ссылку с тем же именем срока. Так компилятор связывает экземпляр с данными, на которые он смотрит.

Опишем обертку над фрагментом строки:

struct Text<'a> { raw: &'a str, } fn main() { let source = String::from("book"); let part = Text { raw: source.as_str(), }; println!("{}", part.raw); }

Пока живет source, поле raw указывает на ее содержимое. Если убрать пометку у Text, сборка напомнит, что ссылка в поле требует именованный срок.

Тот же тип можно вернуть из функции, если ссылка внутри не переживает аргумент:

struct Text<'a> { raw: &'a str, } fn wrap<'a>(piece: &'a str) -> Text<'a> { Text { raw: piece } } fn main() { let word = String::from("rust"); let boxed = wrap(word.as_str()); println!("{}", boxed.raw); }

Дан текст:

let title = String::from("supreme");

Объявите структуру с одним полем-ссылкой на строку, создайте значение из title и выведите поле.

Дано поле:

struct Note { body: &str, }

Скажите, чего не хватает в объявлении и как исправить тип, чтобы файл собрался.

Даны строки:

let a = String::from("left"); let b = String::from("right");

Запишите функцию, которая принимает две общие ссылки и возвращает структуру с полем из более длинного фрагмента, и выведите результат.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить