кому интересно, то так как в rust-е может быть только одна mutable ссылка, то он просит lifetime с трейта Slice
Я не понимаю( Как то, что inner это мут ссылка добавляет ограничения на результат get
Может существовать только одна mut ссылка. rust требует, чтобы self (SliceMut), жил столько же, сколько живёт inner. С SliceRef такого не происходит, потому что может быть несколько imm ссылок на один и тот же объект.
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=a52503f37e7852ee273e0476550a9a0c
Именно. Здесь self живёт столько, сколько нужно
А, ааа, лол, здесь всё наоборот. Предполагается, будто с &mut на родительский контейнер будут получены долгоживущие ссылки на содержимое, то есть, 'a: 'l, что абсурд. С обычными ссылками такое возможно, поскольку там дадут максимум inner mutability делать, и не выйдет намеренно в таком случае всё испортить, если сами контейнеры надёжные (Cell не дерефается, например).
а как понимать 'a : 'l? а дольше l?
а переживает l, угу
а как ты гарантируешь, что self не удалится раньше чем результат?
self это &mut X получили мы & на поле X пускай &mut X удаляется, как это на нас влияет?
а потом кто-то по другой &mut X это поле меняет
Короче, смотри. Максимум вот такое осуществимо – сплит и поехали. Нельзя взять и гетнуть мутслайс по мут ссылке навсегда, не связав лайфтаймы. Тот пример с w/v, который я скидывал, показателен, почему нельзя.
[el, inner @ ..] => (Some(el), Self { inner }), get же всегда первый элемент возвращает
Обсуждают сегодня