为什么我的生命周期函数调用代码正常还是失败?

时间:2019-07-18 09:00:21

标签: rust lifetime

  1. 我是Rust lang的新手,想知道fn main()中两个块之间的区别是什么,谁能用一生的用语来解释。
  2. as_str()调用会更改x和y的寿命吗?
  3. -> &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}
}

1 个答案:

答案 0 :(得分:2)

字符串"ajoisd""aso"的生存期为'static。它们的寿命超过了程序中的任何变量。第一个块中的变量xy仅在小于z生存期的该块中存在。