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
// parameters and the return type, what do we need to change?
// Don't change this function.
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
@ -10,11 +8,13 @@ fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
}
fn main() {
// TODO: Fix the compiler error by moving one line.
let string1 = String::from("long string is long");
let result;
{
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).
}
}