Выбрать главу

let open_box = my::OpenBox { contents: "публичную информацию" };

// а их поля доступны всем.

println!("Открытая упаковка хранит: {}", open_box.contents);

// Публичные структуры с приватными полями не могут быть созданы, используя имя полей

// Ошибка! `ClosedBox` имеет приватные поля

//let closed_box = my::ClosedBox { contents: "классифицированную информацию" };

// ЗАДАНИЕ ^ Попробуйте раскомментировать эту строку

// Однако, структуры с приватными полями могут быть созданы с помощью

// публичного конструктора

let _closed_box = my::ClosedBox::new("классифицированную информацию");

// нельзя получить доступ к приватным полям публичных структур.

// Ошибка! Поле `contents` приватное

//println!("Закрытая упаковка хранит: {}", _closed_box.contents);

// ЗАДАНИЕ ^ Попробуйте раскомментировать эту строку

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

generics и методы

Декларация use используется, чтобы связать полный путь с новым именем, что упрощает доступ.

// extern crate deeply; // обычно эта строка есть и она не закомментирована!

use crate::deeply::nested::{

my_first_function,

my_second_function,

AndATraitType

};

fn main() {

my_first_function();

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Вы можете использовать ключевое слово as, что импортировать сущности и функции под другим именем:

// Привязать путь `deeply::nested::function` к `other_function`.

use deeply::nested::function as other_function;

fn function() {

println!("вызвана `function()`");

}

mod deeply {

pub mod nested {

pub fn function() {

println!("вызвана `deeply::nested::function()`")

}

}

}

fn main() {

// Упрощённый доступ к `deeply::nested::function`

other_function();

println!("Entering block");

{

// Эквивалентно `use deeply::nested::function as function`.

// `function()` затенение собой внешнюю функцию.

use deeply::nested::function;

function();

// у привязок `use` локальная область видимости. В данном случае

// внешняя `function()` затенена только в этом блоке.

println!("Leaving block");

}

function();

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Ключевые слова super и self в пути используются, чтобы устранить неоднозначность между используемыми элементами модуля.

fn function() {

println!("вызвана `function()`");

}

mod cool {

pub fn function() {

println!("called `cooclass="underline" :function()`");

}

}

mod my {

fn function() {

println!("вызвана `my::function()`");

}

mod cool {

pub fn function() {

println!("вызвана `my::cooclass="underline" :function()`");

}

}

pub fn indirect_call() {

// Давайте вызовем все функции под названием `function` в этой области видимости!

print!("вызвана `my::indirect_call()`, с помощью которой\n> ");

// Ключевое слово `self` ссылается на область видимости текущего модуля.