“使用”和“酒吧使用”有什么区别?

Fay*_*ure 11 rust

Rust 的文档中有一些我不明白的地方:它是pub前面的关键字use,它有什么作用?这是 Rust 文档中的示例(此处):

mod front_of_house {
    pub mod hosting {
        pub fn add_to_waitlist() {
            println!("Added to waitlist");
        }
    }
}

pub use crate::front_of_house::hosting;

pub fn eat_at_restaurant() {
    hosting::add_to_waitlist();
    hosting::add_to_waitlist();
    hosting::add_to_waitlist();
}

Run Code Online (Sandbox Code Playgroud)

当我尝试制作一个与之交互的主程序时,我想出了:

use tests::eat_at_restaurant;

fn main() {
    eat_at_restaurant();
}

Run Code Online (Sandbox Code Playgroud)

但是当我删除关键字时,use它会执行相同的操作,并且在任何情况下都无法hosting::add_to_waitlist从 main 调用,那么这里会发生什么?如果我不输入关键字有什么区别pub

Pos*_*rub 23

use用于将项目导入到当前模块中, pub use允许我们(不仅导入,而且)重新导出该项目。

这是一个需要的示例pub use

// src/foo/mod.rs

mod bar;
pub use bar::item;
Run Code Online (Sandbox Code Playgroud)
// src/foo/bar.rs

pub fn item() {
    println!("Hello, world!");
}
Run Code Online (Sandbox Code Playgroud)
// src/main.rs

mod foo;
use foo::item;

fn main() {
    item();
}
Run Code Online (Sandbox Code Playgroud)

如果我们使用普通的,use那么将item无法访问。但是,由于我们添加了pub关键字,item现在可用于使用该nested模块的所有模块。

我们称其为“重新导出”,因为item实际上并未在 中定义foo,而是从 中foo“重新导出” 。itemfoo::bar

  • 老实说,他们的例子有点神秘。它确实正确地解释了它,但是它们并没有真正显示人们会在“哪里”使用“酒吧使用”。 (3认同)
  • 谢谢,我想我现在明白了一点,但这是否意味着他们使用的例子是一个坏例子?其中不需要`pub use`,这就是为什么我不太明白 (2认同)