lifetimes2 solution

This commit is contained in:
mo8it 2024-06-27 13:24:27 +02:00
parent 7efccc36b4
commit 275a854d6e
2 changed files with 38 additions and 6 deletions

View file

@ -1,6 +1,4 @@
// So if the compiler is just validating the references passed to the annotated // Don't change this function.
// parameters and the return type, what do we need to change?
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str { fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() { if x.len() > y.len() {
x x
@ -10,11 +8,13 @@ fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
} }
fn main() { fn main() {
// TODO: Fix the compiler error by moving one line.
let string1 = String::from("long string is long"); let string1 = String::from("long string is long");
let result; let result;
{ {
let string2 = String::from("xyz"); let string2 = String::from("xyz");
result = longest(string1.as_str(), string2.as_str()); result = longest(&string1, &string2);
} }
println!("The longest string is '{}'", result); println!("The longest string is '{result}'");
} }

View file

@ -1 +1,33 @@
// Solutions will be available before the stable release. Thank you for testing the beta version 🥰 fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
} else {
y
}
}
fn main() {
let string1 = String::from("long string is long");
// Solution1: You can move `strings2` out of the inner block so that it is
// not dropped before the print statement.
let string2 = String::from("xyz");
let result;
{
result = longest(&string1, &string2);
}
println!("The longest string is '{result}'");
// `string2` dropped at the end of the function.
// =========================================================================
let string1 = String::from("long string is long");
let result;
{
let string2 = String::from("xyz");
result = longest(&string1, &string2);
// Solution2: You can move the print statement into the inner block so
// that it is executed before `string2` is dropped.
println!("The longest string is '{result}'");
// `string2` dropped here (end of the inner scope).
}
}