为什么编译器说 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
}
据我所知,我有一个函数没有从它的输入参数中借用任何东西,所以我不完全确定为什么我会收到关于生命周期的投诉。我只是使用来自 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
}