diff --git a/rustbook-ru/src/ch07-05-separating-modules-into-different-files.md b/rustbook-ru/src/ch07-05-separating-modules-into-different-files.md index cb9b5a75a..853f52dd7 100644 --- a/rustbook-ru/src/ch07-05-separating-modules-into-different-files.md +++ b/rustbook-ru/src/ch07-05-separating-modules-into-different-files.md @@ -8,11 +8,11 @@ Файл: src/lib.rs -```rust,ignore +```rust,ignore,does_not_compile {{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-21-and-22/src/lib.rs}} ``` -Листинг 7-21. Объявление модуля `front_of_house`, чьё содержимое будет в *src/front_of_house.rs* +Листинг 7-21. Объявление модуля front_of_house, чьё содержимое будет в src/front_of_house.rs Затем поместим код, который был в фигурных скобках, в новый файл с именем *src/front_of_house.rs*, как показано в листинге 7-22. Компилятор знает, что нужно искать в этом файле, потому что он наткнулся в корневом модуле крейта на объявление модуля с именем `front_of_house`. @@ -22,9 +22,9 @@ {{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-21-and-22/src/front_of_house.rs}} ``` -Листинг 7-22. Определение содержимого модуля `front_of_house` в файле *src/front_of_house.rs* +Листинг 7-22. Определение содержимого модуля front_of_house в файле src/front_of_house.rs -Обратите внимание, что вам нужно только *один раз* загрузить файл с помощью объявления `mod` в вашем дереве модулей. Как только компилятор узнает, что файл является частью проекта (и узнает, где в дереве модулей находится код из-за того, куда вы поместили оператор `mod`), другие файлы в вашем проекте должны ссылаться на код загруженного файла, используя путь к месту, где он был объявлен, как описано в разделе [«Пути для ссылки на элемент в дереве модулей»][paths]. Другими словами, `mod` — это *не* операция «включения», которую вы могли видеть в других языках программирования. +Обратите внимание, что вам нужно только *один раз* загрузить файл с помощью объявления `mod` в вашем дереве модулей. Как только компилятор узнает, что файл является частью проекта (и узнает, где в дереве модулей находится код из-за того, куда вы поместили инструкцию `mod`), другие файлы в вашем проекте должны ссылаться на код загруженного файла, используя путь к месту, где он был объявлен, как описано в разделе [«Пути для ссылки на элемент в дереве модулей»]. Другими словами, `mod` — это *не* операция «включения», которую вы могли видеть в других языках программирования. Далее мы извлечём модуль `hosting` в его собственный файл. Процесс немного отличается, потому что `hosting` является дочерним модулем для `front_of_house`, а не корневого модуля. Мы поместим файл для `hosting` в новый каталог, который будет назван по имени его предка в дереве модулей, в данном случае это *src/front_of_house/*. @@ -40,7 +40,7 @@ Файл: src/front_of_house/hosting.rs -```rust +```rust,ignore {{#rustdoc_include ../listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/front_of_house/hosting.rs}} ``` @@ -50,13 +50,13 @@ > > До сих пор мы рассматривали наиболее идиоматические пути к файлам, используемые компилятором Rust, но Rust также поддерживает и старый стиль пути к файлу. Для модуля с именем `front_of_house`, объявленного в корневом модуле крейта, компилятор будет искать код модуля в: > -> * *src/front_of_house.rs* (что мы рассматривали) -> * *src/front_of_house/mod.rs* (старый стиль, всё ещё поддерживаемый путь) +> - *src/front_of_house.rs* (что мы рассматривали) +> - *src/front_of_house/mod.rs* (старый стиль, всё ещё поддерживаемый путь) > > Для модуля с именем `hosting`, который является подмодулем `front_of_house`, компилятор будет искать код модуля в: > -> * *src/front_of_house/hosting.rs* (что мы рассматривали) -> * *src/front_of_house/hosting/mod.rs* (старый стиль, всё ещё поддерживаемый путь) +> - *src/front_of_house/hosting.rs* (что мы рассматривали) +> - *src/front_of_house/hosting/mod.rs* (старый стиль, всё ещё поддерживаемый путь) > > Если вы используете оба стиля для одного и того же модуля, вы получите ошибку компилятора. Использование сочетания обоих стилей для разных модулей в одном проекте разрешено, но это может сбивать с толку людей, перемещающихся по вашему проекту. > @@ -64,12 +64,13 @@ Мы перенесли код каждого модуля в отдельный файл, а дерево модулей осталось прежним. Вызовы функций в `eat_at_restaurant` будут работать без каких-либо изменений, несмотря на то, что определения находятся в разных файлах. Этот метод позволяет перемещать модули в новые файлы по мере увеличения их размеров. -Обратите внимание, что оператор `pub use crate::front_of_house::hosting` в *src/lib.rs* также не изменился, и `use` не влияет на то, какие файлы компилируются как часть крейта. Ключевое слово `mod` объявляет модули, и Rust ищет в файле с тем же именем, что и у модуля, код, который входит в этот модуль. +Обратите внимание, что инструкция `pub use crate::front_of_house::hosting` в *src/lib.rs* также не изменилась, и `use` не влияет на то, какие файлы компилируются как часть крейта. Ключевое слово `mod` объявляет модули, и Rust ищет в файле с тем же именем, что и у модуля, код, который входит в этот модуль. ## Итог -Rust позволяет разбить пакет на несколько крейтов и крейт - на модули, так что вы можете ссылаться на элементы, определённые в одном модуле, из другого модуля. Это можно делать при помощи указания абсолютных или относительных путей. Эти пути можно добавить в область видимости оператором `use`, поэтому вы можете пользоваться более короткими путями для многократного использования элементов в этой области видимости. Код модуля по умолчанию является приватным, но можно сделать определения общедоступными, добавив ключевое слово `pub`. +Rust позволяет разбить пакет на несколько крейтов и крейт - на модули, так что вы можете ссылаться на элементы, определённые в одном модуле, из другого модуля. Это можно делать при помощи указания абсолютных или относительных путей. Эти пути можно добавить в область видимости инструкцией `use`, поэтому вы можете пользоваться более короткими путями для многократного использования элементов в этой области видимости. Код модуля по умолчанию является приватным, но можно сделать определения общедоступными, добавив ключевое слово `pub`. В следующей главе мы рассмотрим некоторые коллекции структур данных из стандартной библиотеки, которые вы можете использовать в своём аккуратно организованном коде. -[paths]: ch07-03-paths-for-referring-to-an-item-in-the-module-tree.html + +[«Пути для ссылки на элемент в дереве модулей»]: ch07-03-paths-for-referring-to-an-item-in-the-module-tree.html \ No newline at end of file