首页 > 解决方案 > 为什么我的生命周期函数调用代码正常或失败?

问题描述

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

标签: rustlifetime

解决方案


字符串"ajoisd""aso"具有'static生命周期。它们比程序中的任何变量都长。变量xy在第一个块中只存在于这个块中,它的生命周期小于z.


推荐阅读