我正在尝试更高级别的特质界限.在我创建的一个最小的例子中,有一个函数采用一个闭包,它接受&str并返回&str相同的生命周期'a.我明确宣布了生命的Fn特征.
fn foo(_: &for<'a> Fn(&'a str) -> &'a str) {
}
fn main() {
foo(&|s| s);
}
Run Code Online (Sandbox Code Playgroud)
这很好用.如果我在闭包中注释参数的类型是类型&str,我收到一个生命周期错误:
fn foo(_: &for<'a> Fn(&'a str) -> &'a str) {
}
fn main() {
foo(&|s: &str| s); // explicitly specified parameter type
}
Run Code Online (Sandbox Code Playgroud)
这让我很困惑.有几个原因.
foo在所有可能的生命周期中都是无法量化的.为什么生命的类型不能随意?是不是
'a只是一辈子的占位符?它没有明确指定类型,但为什么?这两个版本有何不同?
在 Rust 的当前版本中,编译时不会出现警告:
fn foo<T>(_: &T) where
T: for<'a> Fn(&'a str) -> &'a str
{
}
fn main() {
foo(&|s: &str| s); // explicitly specified parameter type
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |