使用字符串时 Rust 中的生命周期

Posted

技术标签:

【中文标题】使用字符串时 Rust 中的生命周期【英文标题】:Lifetimes in Rust when using Strings 【发布时间】:2020-04-20 10:56:04 【问题描述】:

我已经在 Rust 上进行了一段时间的试验。 Rust 中的生命周期存在一些混淆。请看下面的代码:

    fn main() 
    let string1 = String::from("abcd");
    let result;
    
    let string2 = "xyzvn";

    result = longest(string1.as_str(),string2);

    
    println!("The Longest String is ",result);


fn longest<'a>(x: &'a str,y:&'a str) -> &'a str
    if x.len() >y.len()
        x
    
    else
        y
    

string2 的生命周期在内部作用域之后结束,结果在外部作用域中定义。当在 println! 中传递结果时,编译不会报错,继续打印结果。 但是,当我将 string2 更改为:

let string2 = String::from("xyzvd");

借用检查器会抱怨。为什么会这样。

【问题讨论】:

【参考方案1】:

字符串文字”xyzvn” 的类型是&amp;'static str,这意味着它与程序一样长。但是,当您基于它创建一个新字符串时,它的生命周期将在块的末尾结束,并且不能在外部使用。

欲了解更多信息,请参阅documentation on static lifetime

【讨论】:

以上是关于使用字符串时 Rust 中的生命周期的主要内容,如果未能解决你的问题,请参考以下文章

了解生命周期:最大生命周期和“静态”

指定 Rust 闭包的生命周期

Rust 的生命周期

如何在线程中使用静态生命周期?

在 Rust 中使用带有结构的生命周期的正确方法是啥?

在 Rust 中与生命周期的子类型关系作斗争