Всем доброго времени суток. Такой вопрос. А в чем практическая

разница между баундом T:'a и t: &'a T ? И зачем может понадобиться баунд к лайфтайму у owned-типа? К примеру:
fn take_ref<'a, T: 'a>(t: &T) {}
fn take_ref_1<'a, T>(t: &'a T) {}
fn own<'a, T: 'a>(t: T) {}

13 ответов

7 просмотров

легко провести пример для экстремального кейса: T: 'static означает что в T нет не статичных ссылок, это значит что значение может жить пока не перестанет и его можно например в другой тред спокойно передать

вафля'
легко провести пример для экстремального кейса: T:...

опять же T не обязательно значит owned, T = &U это вполне валидная штука

Lighty- Автор вопроса
вафля'
опять же T не обязательно значит owned, T = &U это...

Не-не, это я понимаю. Я просто не совсем пойму, как я могу использовать это свойство.

Lighty- Автор вопроса

Хммм, счас немного поигрался. Почему компилятор требует явного указания лайфтайма здесь ? (17 строка). Ведь мы в дефинишне T указали баунд к 'a. https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=767c8d66014ab3f8c3ad8e886c636083

Lighty- Автор вопроса
Lighty- Автор вопроса
mental stability🥺✨
Это баунд самой Т

То есть, вот как раз таки я об этом и спрашивал. В чем разница баунда T и баунда на ссылку T

Т - может быть ссылкой или содержать ссылку с лайфтаймом 'a А ссылка на него может быть &'b T, 'a: 'b Происходит очень легко, если ссылка живёт меньше чем то, на что она ссылается

Lighty- Автор вопроса

Если я с ссылки убираю явный лайфтайм, то: error[E0621]: explicit lifetime required in the type of `t` --> src/main.rs:20:5 | 17 | fn take_ref<'a, T: 'a + Empty>(t: &T) -> Bar<'a> { | -- help: add explicit lifetime `'a` to the type of `t`: `&'a T` ... 20 | Bar { foo: boxed } | ^^^^^^^^^^^^^^^^^^ lifetime `'a` required

Lighty- Автор вопроса
mental stability🥺✨
Т - может быть ссылкой или содержать ссылку с лайф...

О, теперь до меня дошло. Спасибо большое. То есть, &'a - ссылка на сам объект. T:'a баунд, говорящий о том, что ссылка (если она имеется), внутри T живет по-крайне мере 'a. Правильно понял ?

Lighty
О, теперь до меня дошло. Спасибо большое. То есть,...

Что сам Т живёт минимум 'а. Там внутри необязательно должна быть ссылка, может фантом дата быть Если что, то любой объект без ссылок это T: 'static. Например, тот же вектор это &'a T: 'static, если его элементы 'static. Потому вектор может жить сколько угодно, передавая владение до конца программы. А его ссылка нет

Lighty
Если я с ссылки убираю явный лайфтайм, то: error[E...

так у тебя тогда ссылка (которую ты кастуешь в &'a Empty) может жить меньше 'a

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

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

а что делать если тебя убивают на картах?
Yarik yarik kyda ti lezesh
43
Мне вот что интересно, кто на рфе стартовал/играл, что вы фармили, в каком виде контента он прямо хорош? Экспедиция? Вроде прямо на замазанных мапах рф сдувается
Владислав
20
Подскажите где можно прочитать про реализацию возможности писать человеку при подписке на телеграм канал от имени бота? Было бы не плохо если для Telegraf@3.38.0
Pan Lipton
10
‌/r/pathofexile moderation changes top scoring links : pathofexile (RSS) Hi, everyone. On behalf of the subreddit mod team, I’m here to give you a few updates on the subreddi...
Esionru
3
У меня вопрос к знающими, стоит ли вступать в гильдии в игре или лучше полная свобода?
Енот Полоскун
17
У вас бывает ощущение, что хочется потратить весь отпуск на то, чтоб только спать?
Николай
15
Как можно настроить фильтр в пое под себя?
Yarik yarik kyda ti lezesh
15
Кто нибудь поясните это всё таки вброс или да? Про санктум слышал на поедб вбросили, а по дурке откуда инфа и на сколько это вообще правда? Пахнет шизофренией какой-то ✅Divi...
Dmitry Ritter
9
Ребят, есть какие нибудь мили билды, способные в шмотках с пола закрывать атлас?
Ninja Obormot
12
Всем привет, может уже кто-то пытался выдернуть из api информацию о дате рождения пользователя Есть ли вообще такая возможность?
Artem Stormageddon
2
Карта сайта