开发环境
- Windows 10
- Rust 1.62.1
- VS Code 1.69.2
项目工程
这里继续沿用上次工程rust-demo
引用模块树中项目的路径
为了显示在模块树中何处可以找到一个项目,我们使用了一个路径,就像我们在导航文件系统时使用路径一样。如果我们想调用一个函数,我们需要知道它的路径。
路径可以有两种形式:
- 绝对路径从箱crate根开始,使用箱crate名称(用于外部箱crate中的代码)或文字箱crate(用于当前箱crate中的代码)。
- 相对路径从当前模块开始,使用self、super或当前模块中的标识符。
绝对路径和相对路径后面都跟有一个或多个由双冒号(::)分隔的标识符。
让我们回到之前的例子。我们如何调用add_to_waitlist函数?这就跟问,add_to_waitlist函数的路径是什么一样?下例中包含之前的例子,删除了一些模块和功能。我们将展示两种方法来从在crate根中定义的新函数eat_at_restaurant调用add_to_waitlist函数。eat_at_restaurant函数是我们的库crate的公共API的一部分,所以我们用pub关键字标记它。在“使用pub关键字公开路径”一节中,我们将更详细地讨论pub。注意,这个例子还不能编译;我们稍后会解释原因。
mod front_of_house {
mod hosting {
fn add_to_waitlist() {}
}
}
pub fn eat_at_restaurant() {
// 使用crate绝对和相对路径调用
// Absolute path
crate::front_of_house::hosting::add_to_waitlist(); // crate开始绝对路径
// Relative path
front_of_house::hosting::add_to_waitlist();
}
我们第一次在eat_at_restaurant中调用add_to_waitlist函数时,使用的是绝对路径。add_to_waitlist函数与eat_at_restaurant在同一个crate中定义,这意味着我们可以使用crate关键字开始一个绝对路径。
在crate之后,我们包括每个连续的模块,直到我们添加到等待列表。您可以想象一个具有相同结构的文件系统,我们将指定路径/front _ of _ house/hosting/add_to_waitlist来运行add _ to _ wait list程序;使用板条箱名称从板条箱根目录开始就像在shell中使用/从文件系统根目录开始一样。
第二次在eat_at_restaurant中调用add_to_waitlist时,我们使用的是相对路径。路径以