小编Jon*_*Lee的帖子

当无法推断 Rust 借用检查器中的生命周期时?

在大多数情况下,Rust 编译器可以推断生命周期。如果生命周期范围是在运行时确定的,则表示必须显式标记生命周期。

fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() {
        x
    } else {
        y
    }
}
Run Code Online (Sandbox Code Playgroud)

这里,

  • 生命周期是通用的。
  • 这意味着在函数结果返回后,存在一个绑定到生命周期 'a 的范围。
  • 编译器可以知道内存在最小生命周期“a”内有效的信息。

我很好奇。编译器不能不使用生命周期语法,而是采用生命周期 'a 可以绑定的较少范围区域吗?

fn main() { //larger scope
    let s1 = String::from("long string is long");

    { //fewer scope
        let s2 = String::from("xyz");
        let result = longest(s1.as_str(), s2.as_str());
        println!("The longest string is {}", result); 
    } 
      
}
Run Code Online (Sandbox Code Playgroud)

即使调用方的调用堆栈更复杂,作用域区域也是在借用时确定的,所以同样的问题似乎是可能的。

fn func1<'a>(x: &'a str, y: &'a str) {
   let c = String::from("hello");
   let …
Run Code Online (Sandbox Code Playgroud)

lifetime rust borrow-checker

3
推荐指数
1
解决办法
453
查看次数

标签 统计

borrow-checker ×1

lifetime ×1

rust ×1