mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-26 00:00:03 +03:00
lifetimes2 solution
This commit is contained in:
parent
7efccc36b4
commit
275a854d6e
|
@ -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}'");
|
||||||
}
|
}
|
||||||
|
|
|
@ -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).
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue