Sichtbarkeit von Rust Struct-Feldern

RustRustBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen wir über die Sichtbarkeit von Structs in Rust und wie dies die Zugänglichkeit ihrer Felder beeinflusst.

Hinweis: Wenn das Lab keinen Dateinamen angibt, können Sie einen beliebigen Dateinamen verwenden. Beispielsweise können Sie main.rs verwenden und es mit rustc main.rs &&./main kompilieren und ausführen.


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(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/DataTypesGroup -.-> rust/type_casting("Type Conversion and Casting") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99333{{"Sichtbarkeit von Rust Struct-Feldern"}} rust/string_type -.-> lab-99333{{"Sichtbarkeit von Rust Struct-Feldern"}} rust/type_casting -.-> lab-99333{{"Sichtbarkeit von Rust Struct-Feldern"}} rust/function_syntax -.-> lab-99333{{"Sichtbarkeit von Rust Struct-Feldern"}} rust/expressions_statements -.-> lab-99333{{"Sichtbarkeit von Rust Struct-Feldern"}} rust/method_syntax -.-> lab-99333{{"Sichtbarkeit von Rust Struct-Feldern"}} rust/operator_overloading -.-> lab-99333{{"Sichtbarkeit von Rust Struct-Feldern"}} end

Sichtbarkeit von Structs

Structs haben eine zusätzliche Ebene der Sichtbarkeit für ihre Felder. Die Sichtbarkeit standardmäßig auf privat gesetzt und kann mit dem pub-Modifizierer überschrieben werden. Diese Sichtbarkeit spielt nur eine Rolle, wenn ein Struct von außerhalb des Moduls, in dem es definiert ist, zugegriffen wird, und hat das Ziel, Informationen zu verstecken (Kapselung).

mod my {
    // Ein öffentlicher Struct mit einem öffentlichen Feld vom generischen Typ `T`
    pub struct OpenBox<T> {
        pub contents: T,
    }

    // Ein öffentlicher Struct mit einem privaten Feld vom generischen Typ `T`
    pub struct ClosedBox<T> {
        contents: T,
    }

    impl<T> ClosedBox<T> {
        // Eine öffentliche Konstruktor-Methode
        pub fn new(contents: T) -> ClosedBox<T> {
            ClosedBox {
                contents: contents,
            }
        }
    }
}

fn main() {
    // Öffentliche Structs mit öffentlichen Feldern können wie üblich konstruiert werden
    let open_box = my::OpenBox { contents: "public information" };

    // und ihre Felder können normalerweise zugegriffen werden.
    println!("The open box contains: {}", open_box.contents);

    // Öffentliche Structs mit privaten Feldern können nicht mit Feldnamen konstruiert werden.
    // Fehler! `ClosedBox` hat private Felder
    //let closed_box = my::ClosedBox { contents: "classified information" };
    // TODO ^ Versuchen Sie, diese Zeile zu entsperren

    // Allerdings können Structs mit privaten Feldern mit
    // öffentlichen Konstruktoren erstellt werden
    let _closed_box = my::ClosedBox::new("classified information");

    // und die privaten Felder eines öffentlichen Structs können nicht zugegriffen werden.
    // Fehler! Das `contents`-Feld ist privat
    //println!("The closed box contains: {}", _closed_box.contents);
    // TODO ^ Versuchen Sie, diese Zeile zu entsperren
}

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Struct Visibility-Lab abgeschlossen. Sie können in LabEx weitere Labs absolvieren, um Ihre Fähigkeiten zu verbessern.