Generics 如何在返回类型中使用匿名闭包的高秩特征边界

Generics 如何在返回类型中使用匿名闭包的高秩特征边界,generics,rust,higher-rank-types,Generics,Rust,Higher Rank Types,是否可以返回带有引用的FnMut闭包,并返回具有相同生存期的引用 fn-fun(buf:&mut[f32],mut-idx:usize)->impl-FnMut(&[i16])->&i16]{ |输入|{ buf[idx]=输入[0]作为f32; idx+=1; &输入[1..] } } 我曾经尝试过类似于impl for&'a[i16])的方法,它给出了 error[E0482]:返回值的生存期不超过函数调用 -->src/main.rs:1:44 | 1 | fn fun(buf:&mut

是否可以返回带有引用的
FnMut
闭包,并返回具有相同生存期的引用

fn-fun(buf:&mut[f32],mut-idx:usize)->impl-FnMut(&[i16])->&i16]{
|输入|{
buf[idx]=输入[0]作为f32;
idx+=1;
&输入[1..]
}
}
我曾经尝试过类似于
impl for&'a[i16])
的方法,它给出了

error[E0482]:返回值的生存期不超过函数调用
-->src/main.rs:1:44
|
1 | fn fun(buf:&mut[f32],mut idx:usize)->impl for&'a[i16]{
|                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
注意:返回值仅对函数体上1:13定义的匿名生存期有效
-->src/main.rs:1:13
|
1 | fn fun(buf:&mut[f32],mut idx:usize)->impl for&'a[i16]{
|             ^^^^^^^^^^
  • 返回的函数应按值捕获
    buf
    (即使用
    move
  • 返回的函数不能超过
    buf
    (在下面的代码段中具有生存期
    'buf
    ):
因此:

fn fun impl FnMut(&[i16])->&[i16]+'buf{
移动|输入|{
buf[idx]=输入[0]作为f32;
idx+=1;
&输入[1..]
}
}

你能指出一个文档或澄清一下
+'buf
在这个上下文中的含义吗?为什么不仅仅是
&'b[i16]
?@user1685095
+'buf
意味着返回的函数不能超过生存期
'buf
fn fun<'buf>(buf: &'buf mut [f32], mut idx: usize) -> impl FnMut(&[i16]) -> &[i16] + 'buf {
    move |input| {
        buf[idx] = input[0] as f32;
        idx += 1;
        &input[1..]
    }
}