Модулі - це спосіб згрупувати повʼязаний код, щоб уникати конфліктів імен; вони присутні майже в усіх кодових базах, крім найтривіальніших.
Синтаксис такий:
mod my_module {
pub struct MyStruct {}
pub struct OtherClass {}
}
За межами області видимості модуля до типів, укладених у модулі, звертаються, ставлячи перед назвою типу подвійну двокрапку (::).
Або, що буває частіше, можна розмістити директиву use на початку файлу (чи всередині модуля), і тоді типи можна використовувати без префікса.
Усередині того самого модуля немає потреби уточнювати назви типів.
mod my_module {
#[derive(Drop)]
pub struct MyStruct {}
pub struct Foo {}
#[generate_trait]
pub impl FooImpl of FooTrait {
fn bar() {
let baz = MyStruct {};
}
}
}
#[derive(Drop)]
pub struct Qux {}
#[generate_trait]
impl QuxImpl of QuxTrait {
fn box() {
let nux = my_module::MyStruct {};
}
}
mod other_module {
use super::my_module::*;
#[derive(Drop)]
pub struct Tix {}
#[generate_trait]
pub impl TixImpl of TixTrait {
fn jeg() {
let lor = MyStruct {};
}
}
}
Можна дати модулю або типу псевдонім за допомогою синтаксису use core::array::ArrayTrait as Arr;, а потім використовувати цей псевдонім усюди, де можна було б використати сам модуль або тип.
Керівництво починає застосовувати дарвінівські принципи до проєкту радіокерованої машинки. Розробників поділили на дві команди, Red і Blue, і кожна з них має покращувати конструкцію незалежно від іншої. Їм не потрібно перейматися проєктними рішеннями іншої команди. Нас попросили поглянути на код і зʼясувати, як найкраще поєднати зусилля обох команд для тестування.
Будь ласка, використайте модулі, щоб краще виразити задум коду.
Наразі до важливих типів, як-от Motor і Telemetry, не кажучи вже про сам RemoteControlCar, додають префікс із кольором відповідної команди: <Color>RemoteControlCarTeam.
Єдина мета цього префікса - дозволити типам з однаковими назвами співіснувати в одній програмі.
Це краще виражається за допомогою модуля.
Ми побачимо, що для цих цілей модуль має переваги над додаванням префіксів до назв типів.
Керівництво вимагає, щоб у визначеннях команди називалися «Red Remote Control Car Team» і «Blue Remote Control Car Team», і щоб ці довгі назви використовувалися навіть у самому коді. Однак ці назви досить громіздкі, коли ми посилаємося на команди.
Знайдіть спосіб використати коротші ідентифікатори «Red» і «Blue» у модулі, в якому ми будемо створювати машинки.
Зареєструйтеся на Exercism, щоб вивчати й опановувати Cairo, а також 25 концепцій68 вправ та справжнє наставництво від людей, і все це безкоштовно.