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