Following is my code( I made a playground for it), if can not compile.

```
struct DataSave {
n: Vec<i32>,
m: Vec<f32>,
}
trait PlusNumber {
type A<'a>: where Self: 'a;
type B;
fn a_func_existed<'c, 'a>(&'c self, v: &'a DataSave) -> Self::A<'a>;
fn plus_number<'c, 'a>(&'c self, v: Self::A<'a>) -> Self::B;
}
struct PlusOne;
struct PlusTwo;
impl PlusNumber for PlusOne {
type A<'a> = &'a Vec<i32>;
type B = Vec<i32>;
fn a_func_existed<'c, 'a>(&'c self, v: &'a DataSave) -> Self::A<'a> {
&v.n
}
fn plus_number<'c, 'a>(&'c self, v: Self::A<'a>) -> Self::B {
v.iter().map(|x| x + 1).collect()
}
}
struct DataFunc<'a, T, N> {
data: &'a Vec<T>,
func: N
}
trait SelectCalc {
fn select_calc<'a, 'b, 'k, T, N, K>(&self, v: &DataFunc<'b, T, N>) -> Vec<K>
where
T: Clone + 'k,
N: PlusNumber<A<'a> = &'k Vec<T>, B = Vec<K>> + 'static,
;
}
struct CalcHeader;
impl SelectCalc for CalcHeader {
fn select_calc<'a, 'b, 'k, T, N, K>(&self, v: &DataFunc<'b, T, N>) -> Vec<K>
where
T: Clone + 'k,
N: PlusNumber<A<'a> = &'k Vec<T>, B = Vec<K>> + 'static,
{
let mut res = Vec::new();
let data_part = v.data[..10].to_vec();
let res_part1 = &mut v.func.plus_number(&data_part);
res.append(res_part1);
res
}
}
```

Here is the compile error:

```
[E0597] Error: `data_part` does not live long enough
โญโ[command_6:1:1]
โ
4 โ fn select_calc<'a, 'b, 'k, T, N, K>(&self, v: &DataFunc<'b, T, N>) -> Vec<K>
ยท โโฌ
ยท โฐโโ lifetime `'k` defined here
ยท
11 โ let res_part1 = &mut v.func.plus_number(&data_part);
ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโฌโโโโโ
ยท โฐโโโโโโโโโโโโโโโโ argument requires that `data_part` is borrowed for `'k`
ยท โ
ยท โฐโโโโโโโ borrowed value does not live long enough
ยท
14 โ }
ยท โฌ
ยท โฐโโ `data_part` dropped here while still borrowed
โโโโโฏ
```

How can I make it right?