Модуль в одном файле в Rust
Модуль можно написать прямо в том же файле, где лежит точка входа. Блок с именем складывает функции внутрь, а снаружи к ним идут через имя модуля и два двоеточия.
Соберем приветствие в отдельном блоке и прочитаем его из точки входа:
mod greet {
pub fn hello() -> String {
String::from("hi")
}
}
fn main() {
let text = greet::hello();
println!("{}", text);
}
Функция внутри блока возвращает новую
строку. У нее стоит пометка, которая
открывает имя наружу модуля, иначе
точка входа не смогла бы к ней
обратиться. Путь greet::hello
читается как имя блока и имя функции.
В одном файле можно держать несколько блоков рядом. Каждый задает свой префикс для вложенных имен:
mod greet {
pub fn hello() -> String {
String::from("hi")
}
}
mod math {
pub fn twice(n: i32) -> i32 {
n * 2
}
}
fn main() {
let text = greet::hello();
let count = math::twice(3);
println!("{} {}", text, count);
}
Дан блок:
mod labels {
pub fn tag() -> &'static str {
"ok"
}
}
Допишите точку входа: сохраните результат
labels::tag в переменную и выведите
его.
Дан фрагмент:
mod store {
fn hidden() -> i32 {
1
}
}
Скажите, сможет ли точка входа обратиться
к store::hidden без изменений и
почему.
Даны два блока greet и math
из примера выше. Напишите одну строку
вывода, где сначала идет текст приветствия,
затем удвоенное число 3.