Видимость полей
Видимость полей структуры в Rust определяет,
из каких модулей можно получить доступ к полям
структуры. По умолчанию все поля структуры
являются приватными, то есть доступными только
внутри того модуля, где определена сама структура,
и в её дочерних модулях. Чтобы сделать поле
публичным, перед его именем указывают ключевое
слово pub. Параметром выступает само поле
структуры, для которого нужно задать уровень
доступа.
Уровни видимости полей позволяют инкапсулировать внутреннее состояние структуры, оставляя публичным только необходимый интерфейс.
Синтаксис
struct Name
{
pub field1: Type,
field2: Type,
}
Пример
Давайте создадим структуру с приватным и
публичным полем и попробуем получить доступ
к публичному полю из функции main:
struct Point
{
pub x: i32,
y: i32,
}
fn main()
{
let p = Point { x: 1, y: 2 };
println!("{}", p.x);
}
Результат выполнения кода:
1
Пример
Давайте попробуем получить доступ к приватному
полю y из функции main, которая
находится в том же модуле:
struct Point
{
pub x: i32,
y: i32,
}
fn main()
{
let p = Point { x: 1, y: 2 };
println!("{}", p.y);
}
Результат выполнения кода:
2
Обратите внимание, что поле y приватное,
но доступ к нему возможен, так как функция
main находится в том же модуле, где
определена структура Point.
Пример
Давайте вынесем структуру в отдельный модуль и попробуем получить доступ к приватному полю из родительского модуля:
mod geometry
{
pub struct Point
{
pub x: i32,
y: i32,
}
impl Point
{
pub fn new(x: i32, y: i32) -> Point
{
Point { x, y }
}
pub fn get_y(&self) -> i32
{
self.y
}
}
}
fn main()
{
let p = geometry::Point::new(1, 2);
println!("{}", p.x);
println!("{}", p.get_y());
}
Результат выполнения кода:
1
2
Поле x публичное, поэтому доступ к нему
есть напрямую. Поле y приватное, и
обратиться к нему можно только через публичный
метод get_y.
Смотрите также
-
ключевое слово
fields,
которое описывает поля структуры -
ключевое слово
field-access,
которое описывает доступ к полям структуры -
ключевое слово
methods,
которые позволяют работать с полями структуры -
ключевое слово
struct,
которое описывает объявление структуры