ライフタイム
code:.rs
{
let r; // ---------+-- 'a
// |
{ // |
let x = 5; // -+-- 'b |
r = &x; // | |
} // -+ |
// |
println!("r: {}", r); // |
} // ---------+
code:.rs
fn longest(x: &str, y: &str) -> &str { // コンパイル不可
if x.len() > y.len() {
x
} else {
y
}
}
code:.rs
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
} else {
y
}
}
このように書くと'aがライフタイムを表し,うちもっとも短いものに合わせたものを返すということが明示される. code:.rs
fn main() {
let string1 = String::from("long string is long");
let result;
{
let string2 = String::from("xyz");
result = longest(string1.as_str(), string2.as_str());
// ↑ borrowed value does not live long enough
}
println!("The longest string is {}", result);
}