0
我想写一个返回矢量的第一个元素的简写功能的第一个项目:返回矢量
pub fn first() -> Option<&T> {
let v = Vec::new();
v.first()
}
这当然失败:
error: missing lifetime specifier [E0106]
有什么办法做这个工作?
我想写一个返回矢量的第一个元素的简写功能的第一个项目:返回矢量
pub fn first() -> Option<&T> {
let v = Vec::new();
v.first()
}
这当然失败:
error: missing lifetime specifier [E0106]
有什么办法做这个工作?
不处于当前状态..没有。
基本上,当first()
在这里返回时,v
被丢弃。这使得函数返回一个引用不安全,因为现在引用指向一个void。
一种选择是通过向量,并返回一个参考的第一个项目出来:
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()
}
这似乎是多余的,虽然所以不知道你想做到这一点正是似乎是一个不错的选项。
如果你扩大你的问题,我会扩大我的答案。
也许这可以帮助你
pub fn first<T>(v: &Vec<T>) -> Option<&T> {
let mut v_temp = Vec::new();
//some work on v
v_temp.first().cloned()
}
pub fn first1() -> Option<u8> {
let mut v: Vec<u8> = Vec::new();
//some work on v
v.push(1);
v.first().cloned()
}
这里是一个更好的例子:https://play.rust-lang.org/?gist=a44bfda4a8b6b6f31dbafdd582d82080&version=stable&backtrace=0 - 但我想答案仍然是“不“,这是我非常期待的。谢谢! :) – jgillich