Rust 将具有可变引用的匹配项放入函数时会出现生命期问题

Rust 将具有可变引用的匹配项放入函数时会出现生命期问题,rust,Rust,假设我有这段代码(它是人为的,因为它被大大简化了): 我一直在尝试更改为多个生命周期,并添加了一个where子句(就像我必须要让枚举工作一样),但我似乎无法让它工作。我的问题很简单,就是它是否有效(以及如何工作),或者这里唯一的选择是使用宏。Foo::Bar(ref mut v)借用了&mut Vec中的

假设我有这段代码(它是人为的,因为它被大大简化了):

我一直在尝试更改为多个生命周期,并添加了一个
where
子句(就像我必须要让枚举工作一样),但我似乎无法让它工作。我的问题很简单,就是它是否有效(以及如何工作),或者这里唯一的选择是使用宏。

Foo::Bar(ref mut v)
借用了
&mut Vec
中的
,因此它不能比Foo活得久(只在函数结束之前有效)。您实际想要做的是(按值)获取它,因此您应该在
Foo::Bar(v)

enum Foo<'a, T> where T: 'a {
    Bar(&'a mut Vec<T>),
}

fn main() {
   let mut v = vec![1, 2];
   let foo: Foo<isize> = Foo::Bar(&mut v);
   let a = match foo {
       Foo::Bar(ref mut v) => &mut v[..],
   };
   a[1] = 10;
   println!("a = {:?}", a);
}
fn unpack<'a, T>(foo: Foo<'a, T>) -> &'a mut [T] {
    match foo {
        Foo::Bar(ref mut v) => &mut v[..],
    } 
}
error: `foo.0` does not live long enough
fn unpack<'a, T>(foo: Foo<'a, T>) -> &'a mut [T] {
    match foo {
        Foo::Bar(v) => &mut v[..],
    } 
}
fn unpack<'a, T>(foo: Foo<'a, T>) -> &'a mut [T] {
    match foo {
        Foo::Bar(v) => v,
    } 
}