关闭和更高级别的特征 - 边界生命周期问题

时间:2015-10-27 09:40:32

标签: rust

我正在尝试更高排名的特质界限。在我创建的一个最小的例子中,有一个函数采用一个闭包,它接受&str并返回相同生命期&str的{​​{1}}。我明确地宣布了'a特征的生命周期。

Fn

这很好用。如果我在闭包中注释参数的类型为fn foo(_: &for<'a> Fn(&'a str) -> &'a str) { } fn main() { foo(&|s| s); } 类型,则会收到生命周期错误:

&str

这让我很困惑。有几个原因。

  • 关闭的返回类型不是推断的类型 参数(通过生命周期省略具有相同的寿命)?
  • fn foo(_: &for<'a> Fn(&'a str) -> &'a str) { } fn main() { foo(&|s: &str| s); // explicitly specified parameter type } 的论点在所有可能的情况下都是无法量化的 寿命。为什么生命的类型不能随意?是不是 foo只占了一生的占位符?

它没有明确指定类型,但为什么?这两个版本有何不同?

playpen code

1 个答案:

答案 0 :(得分:1)

在当前版本的 Rust 中,编译时没有警告:

fn foo<T>(_: &T) where
T: for<'a> Fn(&'a str) -> &'a str
{
}

fn main() {
    foo(&|s: &str| s); // explicitly specified parameter type
}