rust - `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
关键字有什么区别?
解决方案
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
,而是从.foo
item
foo::bar
推荐阅读
- docker - Microsoft 映像的 Docker 注册表镜像不起作用
- javascript - 如何将对象字符串值更改为数字
- python - 通过 subprocess.Popen 或 subprocess.run 运行 cmake 命令
- asp.net - 创建新条目时从表单的最后一行填充数据
- c++ - 为什么操作系统正在更改我的数据包分配的传出端口?
- javascript - 带有javascript渲染问题的Django模板
- c++ - 删除指针后访问指针的值
- go - go get 返回 go: flag 需要一个参数:-mod
- reactjs - 问题 chrome 内容安全策略反应扩展清单
- c++ - 如何使用模板继承和组件