чтобы на выход выплюнуть его заимствование, а lifetime привязать к заимстваванному аргументу?
Грубо говоря, я хочу сделать:
fn foo(a: &'a [A]) -> &'a [B] {...}
При этом преобразование в В нельзя сделать in-place, нужно создать новый массив и накидать в него B::from(a[i]).
А какой у этого смысл, если вектор все равно алоцирован будет? Почему бы не хранить в структуре его, а не ссылку? Лайфтайм если что можно отдельно привязать через PhantomData
Эта вся свистопляска, на самом деле, нужна для тестов. Потому что при штатной работе структура содержит в себе слайс, и это, типа, важно.
Если тебе надо что бы структура умела хранить внутри или слайс на внешние данные, или владеть данными (т.е. хранить вектор), то тебе прямая дорога к использованию enum-а в качестве одного из полей структуры. Одно знаениче enum-а будет хранить слайс, второе - вектор.
"...или владеть данными" происходит только в тестах, поэтому енум для этого делать не хочется.
А может тесты тебе "намекают", что такой кейс использования вполне себе возможен и даже востребован?
Обсуждают сегодня