首页 > 解决方案 > `use` 和 `pub use` 有什么区别?

问题描述

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();
}

当我尝试与此交互时,我想出了:

use tests::eat_at_restaurant;

fn main() {
    eat_at_restaurant();
}

但是当我删除use关键字时,它会做同样的事情,我无论如何都不hosting::add_to_waitlist能从 main 调用,那么这里会发生什么?如果我不输入pub关键字有什么区别?

标签: rust

解决方案


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

这是一个需要的示例pub use

// src/foo/mod.rs

mod bar;
pub use bar::item;
// src/foo/bar.rs

pub fn item() {
    println!("Hello, world!");
}
// src/main.rs

mod foo;
use foo::item;

fn main() {
    item();
}

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

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


推荐阅读