fn main()
中两个块之间的区别是什么,谁能用一生的话来解释。 as_str()
调用会更改x和y的生存期吗? -> &a' str
指的是谁的一生? a,b,c在lifetime()
返回位置还是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}
}
最佳答案
字符串"ajoisd"
和"aso"
具有'static
生存期。它们的生命周期超过了程序中的任何变量。第一个块中的变量x
和y
仅存在于此块中,该生命周期小于z
的生存期。
关于rust - 为什么我的生命周期函数调用代码正常还是失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57090758/