У меня есть структура, которая оборачивает некоторые функции вокруг среза:
use std::fmt::Debug;
struct SliceWrapper<'a, T: Debug + Copy + 'a> {
slice: &'a [T],
pos: usize,
}
Я хочу реализовать черту From
для каждого элемента, который поддерживает AsRef<T: Debug + Copy + 'a>
, например:
impl<'a, T: Debug + Copy + 'a, R: AsRef<[T]> + 'a> From<R> for SliceWrapper<'a, T> {
fn from(slice: R) -> Self {
Self {
slice: slice.as_ref(),
pos: 0,
}
}
}
Я получаю ошибку:
error[E0597]: `slice` does not live long enough
--> src/lib.rs:11:20
|
11 | slice: slice.as_ref(),
| ^^^^^ borrowed value does not live long enough
...
14 | }
| - borrowed value only lives until here
|
note: borrowed value must be valid for the lifetime 'a as defined on the impl at 8:6...
--> src/lib.rs:8:6
|
8 | impl<'a, T: Debug + Copy + 'a, R: AsRef<[T]> + 'a> From<R> for SliceWrapper<'a, T> {
| ^^
Я не понимаю этого, потому что я говорю, что R
(slice
) должен жить столько же, сколько и мой SliceWrapper
- и насколько яПоймите, AsRef<_>
наследует время жизни от self
(slice
) ...