Rust 借用检查器的生命周期省略规则

RustRustBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将探讨 Rust 中的省略规则概念,即借用检查器允许省略常见的生命周期模式,以提高可读性并减少输入量。

注意:如果实验未指定文件名,你可以使用任何你想要的文件名。例如,你可以使用 main.rs,并通过 rustc main.rs &&./main 进行编译和运行。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") subgraph Lab Skills rust/variable_declarations -.-> lab-99212{{"Rust 借用检查器的生命周期省略规则"}} rust/integer_types -.-> lab-99212{{"Rust 借用检查器的生命周期省略规则"}} rust/function_syntax -.-> lab-99212{{"Rust 借用检查器的生命周期省略规则"}} rust/expressions_statements -.-> lab-99212{{"Rust 借用检查器的生命周期省略规则"}} end

省略规则

某些生命周期模式极为常见,因此借用检查器会允许你省略它们,以节省输入量并提高可读性。这被称为省略规则。Rust 中存在省略规则纯粹是因为这些模式很常见。

以下代码展示了一些省略规则的示例。有关省略规则更全面的描述,请参阅书中的生命周期省略规则。

// `elided_input` 和 `annotated_input` 的签名本质上是相同的
// 因为 `elided_input` 的生命周期是由编译器推断出来的:
fn elided_input(x: &i32) {
    println!("`elided_input`: {}", x);
}

fn annotated_input<'a>(x: &'a i32) {
    println!("`annotated_input`: {}", x);
}

// 同样,`elided_pass` 和 `annotated_pass` 具有相同的签名
// 因为生命周期被隐式地添加到了 `elided_pass` 中:
fn elided_pass(x: &i32) -> &i32 { x }

fn annotated_pass<'a>(x: &'a i32) -> &'a i32 { x }

fn main() {
    let x = 3;

    elided_input(&x);
    annotated_input(&x);

    println!("`elided_pass`: {}", elided_pass(&x));
    println!("`annotated_pass`: {}", annotated_pass(&x));
}

总结

恭喜你!你已完成“省略规则”实验。你可以在 LabEx 中练习更多实验以提升你的技能。