为什么编译器说 return 值是借来的?

Why is the compiler saying a return value is borrowed?

据我所知,我有一个函数没有从它的输入参数中借用任何东西,所以我不完全确定为什么我会收到关于生命周期的投诉。我只是使用来自 std::sync::mpsc 的 Sender 和救生员箱来提供 Recycled.

我的主要问题是如何解决这个问题,其次为什么编译器认为我返回的是借来的值?

fn spawn_encoders(config: &Config, sender: Sender<Recycled<Vec<u8>>>) -> Vec<Sender<Recycled<Vec<u8>>>> {
    let mut senders = Vec::with_capacity(1 as usize);

    // removed other code

    senders
}
77 | fn spawn_encoders(config: &Config, sender: Sender<Recycled<Vec<u8>>>) -> Vec<Sender<Recycled<Vec<u8>>>> {
   |                                                                                     ^^^^^^^^^^^^^^^^^ expected lifetime parameter
   |
   = help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from `config` or `sender`

Recycled 结构包含借用。您还参考了配置。编译器不知道 return 值是否与 &Config 一样长,或者与 Recycled 中的借位一样长。您需要为 return 值提供明确的生命周期参数。在这种情况下,您使用一般声明的 'a 来指示 return 值与 Sender:

一样长
fn spawn_encoders<'a>(config: &Config, sender: Sender<Recycled<'a, Vec<u8>>>) -> Vec<Sender<Recycled<'a, Vec<u8>>>> {
    let mut senders = Vec::with_capacity(1 as usize);

    // removed other code

    senders
}