O seguinte não compila como eu esperava, pois y
é descartado antes de r.
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() { x } else { y }
}
fn main() {
let x = String::from("xyz");
let r;
{
let y = String::from("abc");
r = longest(x.as_str(), y.as_str());
} // y is dropped
println!("The longest string is {r}");
}
Entretanto, o seguinte é aceito pelo verificador de empréstimo, por quê?
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() { x } else { y }
}
fn main() {
let x = String::from("xyz");
let r;
{
let y = "abcd";
r = longest(&x, y);
} // y should be dropped here right?
println!("The longest string is {r}");
}