• 我是Rust lang的新手,想知道fn main()中两个块之间的区别是什么,谁能用一生的话来解释。
  • Are。 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生存期。它们的生命周期超过了程序中的任何变量。第一个块中的变量xy仅存在于此块中,该生命周期小于z的生存期。

    关于rust - 为什么我的生命周期函数调用代码正常还是失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57090758/

    10-09 16:29