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

Https://Play.Rust-Lang.Org/?Version=Stable&Mode=Debug&Edition=2018&Gist=76f11a2180913a8106d05d1a6b291245 Type Duplet = (Cow<'static, str>, Cow<'static, str>); let map: HashMap<Duplet, ()>

= ...;
let s1 = String::new();
let s2 = String::new();

map.get(&(Cow::Borrowed(s1.as_str()), Cow::Borrowed(s2.as_str())));


А почему это компилируется? Тут лайфтаймы контрвариантными становятся?

18 ответов

23 просмотра

Да Вот таблица variance https://doc.rust-lang.org/nomicon/subtyping.html#variance

Max Силинг
Да Вот таблица variance https://doc.rust-lang.org/...

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

Max Силинг
Да Вот таблица variance https://doc.rust-lang.org/...

а какой смысл этого занятия? Просто битфлаги вроде сделаны для того чтобы ты мог сделать A | B. ПРи этом объединить AData | BData не выйдет если у них хотя бы 1 поле совпадает

Αλεχ Zhukovsky
а какой смысл этого занятия? Просто битфлаги вроде...

У меня есть ивенты Клиент посылает запрос на подписку Вот тут требуется поведение как у битфлагов — можно подписаться на A | B Сервер посылает обратно ивенты Тут требуется tagged union — каждый ивент это либо A, либо B плюс данные

folex- Автор вопроса
Max Силинг
Да Вот таблица variance https://doc.rust-lang.org/...

Спасибо! Но в табличке контрвариантны только аргументы функций, а про контрвариантные лайфтаймы я там не вижу 🤔 > NOTE: the only source of contravariance in the language is the arguments to a function, which is why it really doesn't come up much in practice.

folex
Спасибо! Но в табличке контрвариантны только аргум...

Так это и есть аргумент функции Внутри аргумента функции может быть лайфтайм Аргументы функции контравариантны

Max Силинг
Так это и есть аргумент функции Внутри аргумента ф...

Собственно, лайфтаймы это единственная вещь в языке, у которой вообще есть варианс Для всего остального просто не определены отношения сабтайпинга

folex- Автор вопроса
Max Силинг
Так это и есть аргумент функции Внутри аргумента ф...

а, понял. Аргументы функции get же. Спасибо 🙂

Max Силинг
Собственно, лайфтаймы это единственная вещь в язык...

Я только что соврал, у трейтов тоже определён некий ограниченный «сабтайпинг», в частности

folex
а, понял. Аргументы функции get же. Спасибо 🙂

В частности, Box<dyn A + Send> пролезает в Box<dyn A> https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=0132e6b3f228b12945ac979ca27963c3

folex- Автор вопроса
folex
а вот тут я поплыл

Трейт обджекты могут коэрсится к менее строгим трейт обджектам, что на вид выглядит как сабтайпинг Считать это сабтайпингом или коэршном я не уверен С одной стороны, референс утверждает, что > Subtyping in Rust is very restricted and occurs only due to variance with respect to lifetimes and between types with higher ranked lifetimes. https://doc.rust-lang.org/reference/subtyping.html С другой стороны, все коэршны перечислены здесь, и тут такого нет https://doc.rust-lang.org/reference/type-coercions.html

folex- Автор вопроса
folex
а вот тут я поплыл

а, ну хотя всё в порядке же. foo ничего опасного сделать не сможет, всё логично

Max Силинг
Трейт обджекты могут коэрсится к менее строгим тре...

Кстати, интересный вопрос, что тут происходит

Traveller Kolsky
T is Unsize<dyn Trait> when T: Trait

Угу, CoerceUnsized между боксами с одинаковыми аллокаторами https://doc.rust-lang.org/stable/std/ops/trait.CoerceUnsized.html#impl-CoerceUnsized%3CBox%3CU%2C%20A%3E%3E Тогда это коэршн, а не сабтайпинг

Max Силинг
У меня есть ивенты Клиент посылает запрос на подпи...

Я сделал для такого у себя немножко корявый вариант ручками десериалайз написал и обмазался макросами

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

как вот тут

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта