fn main()
中两个块之间的区别是什么,谁能用一生的用语来解释。as_str()
调用会更改x和y的寿命吗?-> &a' str
指的是谁的寿命? lifetime()
处的a,b,c返回位置还是z接收结果?我认为变量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}
}
答案 0 :(得分:2)
字符串"ajoisd"
和"aso"
的生存期为'static
。它们的寿命超过了程序中的任何变量。第一个块中的变量x
和y
仅在小于z
生存期的该块中存在。