I’m trying to write a shorthand function that returns the first element of a vector:
pub fn first() -> Option<&T> { let v = Vec::new(); v.first() }
Which of course fails with:
error: missing lifetime specifier [E0106]
Is there any way to make this work?
Answer
Not in its current state.. no.
Basically, when first()
returns here, v
is dropped. Which makes returning a reference out of the function unsafe, because now the reference points into a void.
One option is to pass the vector in and return a reference to the first item out:
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()
}
This seems redundant though and so without knowing exactly what you’re trying to do this seems like an okay option.
If you expand your question I will expand my answer.
Attribution
Source : Link , Question Author : jgillich , Answer Author : Simon Whitehead