2017-05-22 1 views
2

Ich habe festgestellt, dass bei einem P<SomeStruct>, Zugriff auf Felder der SomeStruct direkt auf den Zeiger scheint zu arbeiten, und ich bin mir nicht sicher, warum das ist. Zum Beispiel stellt dieser Code und funktioniert wie erwartet (prints „1234“):Warum funktioniert der Zugriff auf ein Feld auf einen Zeiger auf eine Struktur in Rost?

#![feature(rustc_private)] 

extern crate syntax; 
use syntax::ptr::P; 

struct Baz { 
    id: String, 
} 

fn foo() { 
    let mut struct_pointer: P<Baz> = P(Baz { 
     id: "1234".to_string(), 
    }); 
    println!("{}", struct_pointer.id); 
} 

Welche Sprache-Funktion ist mir erlaubt, das id Feld auf der struct_pointer Bindung zugreifen? Dereferenzierung? Zwang? Und gibt es eine Möglichkeit zu sagen, dass so etwas funktioniert, wenn man sich die Dokumente für P anschaut?

+3

Ihr Beispiel ist unvollständig und nicht reproduzierbar. Bitte geben Sie Ihre Definitionen von 'P' und' Baz' an. –

+1

Ich nehme an, 'P' ist eine' Syntax :: ptr :: P' und 'Baz' eine zufällige Struktur? Angesichts der Implementierung von 'Deref' für' P' muss es die Dereferenzierung von Zwang sein. Das Gleiche gilt für "1234" .to_string ". – Procrade

+0

@ E_net4, Procrade hat Recht, ich dachte, das wäre klar genug, Entschuldigung für die Verwirrung. Ich habe das Beispiel aktualisiert. –

Antwort

1

Es ist implemented mit the Deref trait.

Überlastet den * Operator. In Rust . automatisch Dereferenzen bei Bedarf, so kann der Compiler foo.bar als (*foo).bar interpretieren.

Verwandte Themen