2

我正在尝试阅读伺服的代码。例如,我正在layout_task.rs 中查看此代码

use url::Url;

..我想知道这是指哪个代码(答案是rust-url)。

4

1 回答 1

6

根据Rust 参考 §6.1.2.2 使用声明

useitems 中包含的路径是相对于 crate 根[...]

也可以在项目的开头使用selfsuperuse来分别引用当前和直接父模块。

所有关于访问声明中声明的模块的规则use都适用于模块声明和extern crate声明。

参考资料(§5 板条箱和源文件)没有明确说明什么是“板条箱根”,但它确实分享了这一点:

一个 crate 包含一个嵌套模块范围的树。这棵树的顶层是一个匿名模块 [...] Rust 编译器总是使用单个源文件作为输入调用,并且总是产生一个输出包。该源文件的处理可能会导致其他源文件被加载为模块。

所以看起来要找到当前文件(layout_task.rs)所属的crate 根,我们需要弄清楚rustc在构建 crate 时调用的源文件是什么。对于 Cargo,这在Cargo.toml中指定,默认为src/lib.rs

[lib]
path = "src/lib.rs"

就我而言,这是Cargo.tomllib.rs有:

extern crate url;
pub mod layout_task;

到现在为止还挺好。要找出extern crate指的是什么,我们需要再次查看Cargo.toml

[dependencies.url]
version = "0.2"

货物文档声称“没有用单独的部分声明来自 crates.io 的依赖项”,但显然它们可以是......所以我们在 crates.io 上查看包:https ://crates.io/crates/url

于 2015-09-27T16:25:26.170 回答