Почему доступ к полю указателя на структуру работает в ржавчине?

Я заметил это, учитывая 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,

Другие вопросы по тегам