烤肉串盒防 rust 模块

ryevplcw  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(130)

我喜欢用烤肉串命名我的文件夹和文件。
最近,我一直在学习rust,并学习了一些关于模块的知识。在其中一个例子中,我有一个文件名为:distinct-powers.rs。每当我使用mod distinct-powers将代码置于作用域中时,我显然会得到一个语法错误,因为Rust不能处理kebab-case。错误是:Syntax Error: expected BANGrust-analyzer,我认为它没有告诉我们任何信息,因为它认为错误是完全不同的。
有没有办法绕过Rust的这个限制?

js5cn81o

js5cn81o1#

如果确实需要,可以将模块的代码放在任意文件名中:


# [path = "distinct-powers.rs"]

mod distinct_powers;

但请不要这样做-Rust的一个优点是它有一个单一的项目布局标准,这使得你可以很容易地深入到其他人的代码中。每一次定制都是对寻找他们所需代码的人的干扰。
有几个地方允许使用连字符,也就是说,在Rust包中 * 可以 * 使用烤肉串名字。它们都与构建系统Cargo有关,而不是与Rust语言本身有关。

  • 包本身的名字(在Cargo.toml中指定的)可以是kebab-case。如果包是一个库,Cargo会自动将其翻译为snake_case作为库的 crate name(这是你在Rust代码的依赖项中引用它的方式)。这是很常见的。

例如,在此docs URL https://docs.rs/ordered-float/latest/ordered_float/中,您可以看到软件包名称为ordered-float,而crate名称(* 可以 * 被覆盖,但没有被覆盖)是从该名称派生的,为ordered_float

  • 二进制文件、示例或测试目标的名称可以包含连字符。这意味着在target/中生成的二进制文件可以具有串首字母大写的名称-cargo run --bin distinct-powers是有效的。

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

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

相关问题