172 похожих чатов

Всем доброго времени суток В моей кривой обучения снова тот момент,

когда я ничего не понимаю во временах жизни

Есть такой код

rust
struct A {

}

struct B<'s> {
a: &'s A,
}

impl <'s> B <'s> {
pub fn new(a: &'s A) -> B {
B {
a,
}
}
}


struct C {
b: &'static B<'static>,
}

impl C {
pub fn new (b: &'static B) -> C {
C {
b
}
}
}

fn main() {
let a = A {};
let b = B::new(&a);
let c = C::new(&b);
}

и вот такой вывод


Standard Error

Compiling playground v0.0.1 (/playground)
warning: unused variable: `c`
--> src/main.rs:33:9
|
33 | let c = C::new(&b);
| ^ help: if this is intentional, prefix it with an underscore: `_c`
|
= note: `#[warn(unused_variables)]` on by default

error[E0597]: `a` does not live long enough
--> src/main.rs:32:20
|
32 | let b = B::new(&a);
| -------^^-
| | |
| | borrowed value does not live long enough
| argument requires that `a` is borrowed for `'static`
33 | let c = C::new(&b);
34 | }
| - `a` dropped here while still borrowed

error[E0597]: `b` does not live long enough
--> src/main.rs:33:20
|
33 | let c = C::new(&b);
| -------^^-
| | |
| | borrowed value does not live long enough
| argument requires that `b` is borrowed for `'static`
34 | }
| - `b` dropped here while still borrowed

error: aborting due to 2 previous errors; 1 warning emitted

For more information about this error, try `rustc --explain E0597`.
error: could not compile `playground`

To learn more, run the command again with --verbose.



ссылка на плейграунд https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=700996a357032e44c8d9858fe30ffe03

не понимаю, почему для a и для b не применяется время жизни 'static

10 ответов

16 просмотров

потому что b дропается при выходе из main соответственно его лайфтайм не 'static

Vital-L Автор вопроса
Vetro
потому что b дропается при выходе из main соответ...

сразу появляется один вопрос получается, что у main время жизни не 'static? и можно ли мейну назначить другое время жизни?

Vital L
сразу появляется один вопрос получается, что у mai...

для переменных объявленных внутри функции как правило время жизни привязано к этой функции нет, нельзя

Vital-L Автор вопроса
Vetro
для переменных объявленных внутри функции как прав...

облом заюзал либу, в которой есть функция, которая ждёт именно статик. И ради одной говёной либы не хочется все структуры в своём коде делать 'stattic возможно есть какой-то выход?

Vital-L Автор вопроса
вафля'
а что за либа?

actix-web а конкретно вот здесь App::new() .data(... как я понял - это единственный законный способ заинжектить в хэндлер роута проинициализированную структуру-сервис

И компилятор зря не предупреждает, но в имплах возвращай Self, или хотя бы B<'s>/B<'_>, чтобы явно лайфтайм был указан. В 2021 издании станет ошибкой компиляции.

Vital L
actix-web а конкретно вот здесь App::new() ...

Ну он не &'static ссылку требует, а просто T: 'static данные. Для этого действительно достаточно не хранить ссылки. Afaic data даже не требует копирования, под капотом просто Arc хранится...

Vital-L Автор вопроса
вафля'
Ну он не &'static ссылку требует, а просто T: 'sta...

внутри даты то что ты передаёщь обёрнутое в Arc

вафля'
Ну он не &'static ссылку требует, а просто T: 'sta...

nvm, в актиксе создаётся несколько App, чтобы шерить между ними всё-таки нужен свой Arc

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
7
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
7
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Карта сайта