- 我是 Rust lang 的新手,想知道
fn main()
中的两个块之间有什么区别,任何人都可以用一生的话来解释。 - 是。
as_str()
调用会改变 x 和 y 的生命周期? -> &a' str
指的是谁的一生?a,b,c在返回位置还是z在返回位置lifetime()
?
我认为变量 x 和 y 在两个块中具有相同的生存范围。z的那个涵盖了x和y。
如果(x: &'a str, y: &'a str, z: &'a str)
要求相同的生存范围为 x,y,z,则两个块都应失败。
fn main()
{
let mut z = "123abc";
{//// CAN ONLY SUCCEED WHEN REMOVE THE BRACES OF THIS BLOCK
let x = String::from("ajoisd");
let y = String::from("aso");
z = lifetime(x.as_str(), y.as_str(), z);
}
{//// GOES WELL WITH/WITHOUT BRACES
let x = "ajoisd";
let y = "aso";
z = lifetime(x, y, z);
}
println!("{}", z);
}
fn lifetime<'a>(a: &'a str, b: &'a str, c: &'a str) -> &'a str
{
if a.len() > b.len() {a}
else if a.len() < b.len() {b}
else {c}
}
字符串
"ajoisd"
和"aso"
具有'static
生存期。它们的寿命比程序中的任何变量都长。第一个块中的变量x
和y
仅存在于小于z
生存期的该块中。