Модули ржавчины для кебаб-кейса

Мне нравится называть свои папки и файлы по соглашению о кебабе.

Недавно я изучал rust и немного узнал о модулях. В одном из примеров у меня есть файл с именем: distinct-powers.rs. Всякий раз, когда я делаю mod distinct-powers, чтобы поместить код в область видимости, я, очевидно, получаю синтаксическую ошибку, поскольку Rust не может обрабатывать кебаб-кейс. Ошибка: Syntax Error: expected BANGrust-analyzer, которая, я думаю, ни о чем нас не информирует, так как думает, что ошибка совершенно другая.

Есть ли способ обойти это ограничение Rust?

Замените символ - на _ (подчеркивание).

Aleksander Krauze 17.10.2022 23:30
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
0
1
114
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы действительно хотите, вы можете разместить код модулей в произвольных именах файлов:

#[path = "distinct-powers.rs"]
mod distinct_powers;

Но, пожалуйста, не надо — одна из замечательных особенностей Rust заключается в том, что существует единый стандарт для макета проекта, который позволяет легко погрузиться в чужой код. Каждая настройка мешает кому-то найти код, который он ищет.


Есть пара мест, где разрешены дефисы, то есть в пакете Rust можно использовать имя kebab-case. Все они связаны с Cargo, системой сборки, а не с самим языком Rust.

  • Имя самого пакета (как указано в Cargo.toml) может быть kebab-case. Если пакет является библиотекой, Cargo автоматически преобразует это в snake_case для имени ящика библиотеки (именно так вы ссылаетесь на него в коде Rust в зависимых файлах). Это довольно часто делается.

    Например, в этом URL-адресе документации, https://docs.rs/ordered-float/latest/ordered_float/, вы можете видеть, что имя пакета ordered-float и имя ящика (которое можно было бы переопределить, но не было) происходит от этого как ordered_float.

  • Имя двоичного файла, примера или тестовой цели может содержать дефисы. Это означает, что двоичные файлы, встроенные в target/, могут иметь имена в регистре кебаба — cargo run --bin distinct-powers допустимо.

Все эти имена могут использоваться автообнаружением грузовых целей и, таким образом, не считаются нестандартной компоновкой.

kebab-enthusiast/
  Cargo.toml
  src/
    lib.rs
    snake_module.rs
    bin/
      kebab-binary.rs
  examples/
    kebab-example.rs
  tests/
    kebab-test.rs

Спасибо за ваш ответ. У меня есть один нисходящий вопрос, если вы не возражаете. Программисты kebab-case просто не используют соглашение kebab-case в rust? Например, мне нравится это соглашение об именах, что делают люди, которым это соглашение нравится? Просто не использовать его в Rust?

justbecause 18.10.2022 22:59

@justbecause Довольно часто пакеты Rust (называемые ящиками) называют kebab-case именами (пример), и Cargo автоматически переводит их имена в snake_case для использования в языке. Но для организации модулей внутри пакета очень строгим соглашением является придерживаться точных стандартизированных мест, где файлы следуют за кодом, а не наоборот.

Kevin Reid 18.10.2022 23:04

@justbecause я расширил свой ответ, чтобы охватить больше примеров.

Kevin Reid 18.10.2022 23:22

Спасибо за ваш ответ еще раз. Я ценю его. Я постараюсь не использовать чехол для кебаба, чтобы соответствовать рекомендациям по защите от ржавчины.

justbecause 18.10.2022 23:22

Другие вопросы по теме