Rust 向返回impl Trait的函数添加泛型类型需要使用';静态寿命
我有一个函数,它将引用作为参数并返回Rust 向返回impl Trait的函数添加泛型类型需要使用';静态寿命,rust,traits,lifetime,Rust,Traits,Lifetime,我有一个函数,它将引用作为参数并返回impl Future。future不引用参数(它需要一个副本),因此引用不必超过函数调用: use futures::{Future, future}; // 0.1.25 pub struct Point<'a> { _name: &'a str, } pub fn write<'a>(_points: &'a [Point<'a>]) -> impl Future<Item =
impl Future
。future不引用参数(它需要一个副本),因此引用不必超过函数调用:
use futures::{Future, future}; // 0.1.25
pub struct Point<'a> {
_name: &'a str,
}
pub fn write<'a>(_points: &'a [Point<'a>]) -> impl Future<Item = (), Error = ()> + 'static {
future::ok(())
}
pub fn call_write(points: Vec<Point>) -> impl Future<Item = (), Error = ()> {
// this works fine
write(&points)
}
error[E0621]:点类型中需要显式生存期`
-->src/lib.rs:11:42
|
11 |发布fn调用_write(点:Vec)->impl Future{
|-------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^需要终身“静态”
| |
|帮助:将显式生存期“static”添加到“points”类型中:`std::vec::vec-BoxI我怀疑这可能是Rust 2018的新生存期省略规则的意外结果;您是否可以尝试使用较旧的编译器版本(1.30或更早版本)?请注意,在Rust 2018中,不推荐在非引用类型中省略寿命参数,因此您应该编写Vec@trentcl不,1.30和更早的版本是一样的。这一定是impl-Trait本身的一个限制,我想知道确切的原因。
pub fn write<'a, T: 'a>(_points: &'a [T]) -> impl Future<Item = (), Error = ()> + 'static {
future::ok(())
}
pub fn write<'a, T: 'a>(_points: &'a [T]) -> Box<dyn Future<Item = (), Error = ()> + 'static> {