如何将 Rust 文件与 kebab-case 一起使用?

jus*_*use 1 module naming-conventions rust

我喜欢用短横线命名我的文件夹和文件。

最近,我一直在学习 Rust,了解了一些关于模块的知识。在其中一个示例中,我有一个名为: 的文件distinct-powers.rs。每当我mod distinct-powers将代码放入作用域时,我显然都会遇到语法错误,因为 Rust 无法处理 kebab-case。错误是:Syntax Error: expected BANGrust-analyzer我认为这没有告诉我们任何信息,因为它认为错误是完全不同的。

有什么办法可以绕过 Rust 的这个限制吗?

Kev*_*eid 11

如果你真的愿意,你可以将 module\xe2\x80\x99 代码放置在任意文件名中:

\n
#[path = "distinct-powers.rs"]\nmod distinct_powers;\n
Run Code Online (Sandbox Code Playgroud)\n

但请不要\xe2\x80\x99t \xe2\x80\x94 Rust 的一大优点是项目布局有一个单一的标准,这使得深入研究其他人\xe2\x80\x99 的代码变得很容易。每次定制都会对寻找他们正在寻找的代码的人造成干扰。

\n
\n

有几个位置允许使用连字符,即 kebab-case 名称可以在 Rust 包中使用短横线命名。它们都与构建系统 Cargo 有关,而不是 Rust 语言本身。

\n
    \n
  • 包本身的名称(如 中指定的Cargo.toml)可以是kebab-case。如果包是一个库,Cargo 会自动将其翻译snake_case为库的板条箱名称(这就是您在依赖项中的 Rust 代码中引用它的方式)。这是很常见的做法。

    \n

    例如,在此文档 URL https://docs.rs/ordered-float/latest/ordered_float/中,您可以看到包名称是,ordered-float而包名称(可以被覆盖但未被覆盖)是从中派生的作为ordered_float

    \n
  • \n
  • 二进制文件、示例或测试目标的名称可以包含连字符。这意味着内置的二进制文件target/可以具有短横线大小写的名称 \xe2\x80\x94\xc2\xa0cargo run --bin distinct-powers是有效的。

    \n
  • \n
\n

这些名称都可以由Cargo 目标自动发现使用,因此被视为非标准布局。

\n
kebab-enthusiast/\n  Cargo.toml\n  src/\n    lib.rs\n    snake_module.rs\n    bin/\n      kebab-binary.rs\n  examples/\n    kebab-example.rs\n  tests/\n    kebab-test.rs\n
Run Code Online (Sandbox Code Playgroud)\n

  • @只是因为用“kebab-case”名称([示例](https://crates.io/crates/ordered-float))来命名 Rust _packages_(宽松地称为板条箱)是很常见的,并且 Cargo 会自动将它们的名称翻译为`snake_case` 在语言中使用。但对于包内的模块组织,非常严格的约定是坚持_文件_遵循_代码_的精确标准化位置,反之亦然。 (2认同)