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 ответов

6 просмотров

потому что 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

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

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

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
TCodePointer = record cp: CodePointer; name: string; cnt: Integer; next: TCodePointerArray; // этот тип ещё неизвестен end; TCodePointerArray = array of ...
notme
9
Привет ) есть такой кусок кода, он считывает ini файл. my $conf = Config::IniFiles->new( -file => $ini_file ); if (!$conf) { $self->my_die('cannot_read_cfg', ...
Kolya lastname
7
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Блин, интересно, кто-нибудь когда-нибудь переписывал какую-нибудь игру с x86 на arm? Вообще, такое возможно?
Alan 🔝 Бэброу
13
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
здравствуйте, братья, кто-нибудь знает, как работать с Swift.com или Swift.net?
Ozzy
6
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
Карта сайта