为什么我的终身函数调用代码正常或失败


  1. 我是 Rust lang 的新手,想知道fn main()中的两个块之间有什么区别,任何人都可以用一生的话来解释。
  2. 是。as_str()调用会改变 x 和 y 的生命周期?
  3. -> &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生存期。它们的寿命比程序中的任何变量都长。第一个块中的变量xy仅存在于小于z生存期的该块中。

最新更新