我正在尝试编写一个速记函数,该函数返回向量的第一个元素:
pub fn first() -> Option<&T> {
let v = Vec::new();
v.first()
}
Run Code Online (Sandbox Code Playgroud)
当然哪个会失败:
错误:缺少生命周期说明符[E0106]
有什么办法可以使这项工作吗?
不在当前状态。
基本上,当first()返回此处时,将v被丢弃。这使得从函数中返回引用是不安全的,因为现在引用指向一个空值。
一种选择是传递向量,并返回对第一项的引用:
fn main () {
let v = vec![1,2,3,4];
println!("{:?}", first(&v).unwrap()); // Prints 1
}
fn first<T>(v: &Vec<T>) -> Option<&T> {
v.first()
}
Run Code Online (Sandbox Code Playgroud)
但是,这似乎是多余的,因此在不完全知道您要执行的操作的情况下,这似乎是一个不错的选择。
如果您提出问题,我会扩大我的答案。
| 归档时间: |
|
| 查看次数: |
3621 次 |
| 最近记录: |