我正在尝试更高排名的特质界限。在我创建的一个最小的例子中,有一个函数采用一个闭包,它接受&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
只占了一生的占位符?它没有明确指定类型,但为什么?这两个版本有何不同?
答案 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
}