UseDeclaration 在板条箱根中找不到结构

UseDeclaration cannot find struct in the crate root

我从 cargo new tst 开始。然后在 src/lib.rs 我有:

pub struct Config {}

并且 src/main.rs 如下所示:

use crate::Config;

fn main() {}

然而这并不能编译:

> cargo run
   Compiling tst v0.1.0 (/home/*/rust/book/tst)
error[E0432]: unresolved import `crate::Config`
 --> src/main.rs:1:5
  |
1 | use crate::Config;
  |     ^^^^^^^^^^^^^ no `Config` in the root

For more information about this error, try `rustc --explain E0432`.
error: could not compile `tst` due to previous error

但是如果我像这样用箱子的名称替换 crate::

use tst::Config;

fn main() {}

然后就可以了:

> cargo run
   Compiling tst v0.1.0 (/home/*/rust/book/tst)
warning: unused import: `tst::Config`
 --> src/main.rs:1:5
  |
1 | use tst::Config;
  |     ^^^^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

warning: `tst` (bin "tst") generated 1 warning
    Finished dev [unoptimized + debuginfo] target(s) in 0.25s
     Running `target/debug/tst`

rustc --explain E0432 的输出有以下引用,如果我理解正确的话,我可以 使用 crate 的名称 或者简单地 crate:::

In Rust 2018, paths in use statements are relative to the current module unless they begin with the name of a crate or a literal crate::, in which case they start from the crate root. As in Rust 2015 code, the self:: and super:: prefixes refer to the current and parent modules respectively.

我是不是做错了什么?有没有一种方法可以使用 lib.rs 中的代码而不用硬编码 crate 的名称?

> rustc --version
rustc 1.56.1 (Arch Linux rust 1:1.56.1-3)

> cat Cargo.toml
[package]
name = "tst"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

无法引用“我的包中的库箱”;你必须通过它的名字来引用它。 Rust 编译器(目前)不知道关于碰巧在同一个 Cargo 包中的其他箱子的任何信息; 它一次只编译一个箱子。

为了改变这一点,您需要编写一个 Rust RFC,其中需要包含一个描述,说明为什么拥有此功能很有价值——可能比“它不会那么硬编码”更有说服力”,因为 main 取决于库几乎肯定会使用特定于库的名称,所以库本身的名称是一个小问题(除非,我想,你从一个公共的创建许多包模板)。