Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Видимість структури

Структури мають додатковий рівень видимості для своїх полів. Видимість за замовчуванням є приватною і може бути перевизначена за допомогою модифікатора pub. Ця видимість має значення лише тоді, коли до структури звертаються з-за меж модуля, де її визначено, і має на меті приховування інформації (інкапсуляцію).

mod my {
    // Публічна структура з публічним полем узагальненого типу `T`
    pub struct OpenBox<T> {
        pub contents: T,
    }

    // Публічна структура з приватним полем узагальненого типу `T`
    pub struct ClosedBox<T> {
        contents: T,
    }

    impl<T> ClosedBox<T> {
        // Публічний конструктор-метод
        pub fn new(contents: T) -> ClosedBox<T> {
            ClosedBox {
                contents: contents,
            }
        }
    }
}

fn main() {
    // Публічні структури з публічними полями можна створювати як зазвичай
    let open_box = my::OpenBox { contents: "public information" };

    // і до їхніх полів можна нормально звертатися.
    println!("The open box contains: {}", open_box.contents);

    // Публічні структури з приватними полями не можна створювати, використовуючи імена полів.
    // Помилка! `ClosedBox` має приватні поля
    //let closed_box = my::ClosedBox { contents: "classified information" };
    // TODO ^ Спробуйте розкоментувати цей рядок

    // Однак структури з приватними полями можна створювати, використовуючи
    // публічні конструктори
    let _closed_box = my::ClosedBox::new("classified information");

    // і до приватних полів публічної структури не можна звертатися.
    // Помилка! Поле `contents` є приватним
    //println!("The closed box contains: {}", _closed_box.contents);
    // TODO ^ Спробуйте розкоментувати цей рядок
}

Див. також:

узагальнені типи and методи