2017-05-22 7 views
2

P<SomeStruct>を指定すると、SomeStructのフィールドにポインタで直接アクセスすると機能するように見えますが、その理由はわかりません。たとえば、このコードはコンパイルし、期待される(版画「1234」)として機能します。構造体へのポインタのフィールドへのアクセスが錆びているのはなぜですか?

#![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); 
} 

何語の特徴私は結合struct_pointeridフィールドにアクセスすることを可能にするのですか?逆参照?強制?そして、この種のことが、Pのドキュメントを見てもうまくいくと言う方法はありますか?

+3

あなたの例は不完全で再現性がありません。 'P'と' Baz'の定義を含めてください。 –

+1

私は 'P'を' syntax :: ptr :: P'とし、 'Baz'をランダム構造体としますか? 'P'の' Deref'の実装が与えられると、それは逆参照強制でなければなりません。実際は '.to_string'にも同じことが起こります。 – Procrade

+0

@ E_net4、Procradeはそうだ、私はそれが十分に分かりやすいと思った、混乱のために残念。私は例を更新しました。 –

答えて

1

implementedthe Deref traitを使用しています。

オペレータに*演算子がオーバーロードされます。錆では、.は必要に応じて自動的に逆参照されるので、foo.bar(*foo).barと解釈することができます。

関連する問題