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` ссылается на область видимости текущего модуля.