Почему доступ к полю указателя на структуру работает в ржавчине?
Я заметил это, учитывая 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);
}
Какая языковая функция позволяет мне получить доступ к id
поле на struct_pointer
связывание? Разыменование? Принуждение? И есть ли способ сказать, что такого рода вещи будут работать, посмотрев на документы для P
?
1 ответ
Решение
Это реализовано с использованием Deref
черта.
Это перегружает *
оператор. В ржавчине .
автоматически разыменовывается при необходимости, так что компилятор может интерпретировать foo.bar
как (*foo).bar
,