You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中use与pub use关键字的作用及区别是什么?

移除use仍可正常运行的原因

你遇到的这个现象分两种情况:

  • 如果你移除的是示例代码里的pub use crate::front_of_house::hosting;:eat_at_restaurant本身是带pub修饰的公开函数,它的可见性和你是否导出hosting模块完全无关。只要你把函数内部的hosting::add_to_waitlist()替换为完整路径crate::front_of_house::hosting::add_to_waitlist(),函数逻辑不会有任何变化,调用结果自然相同。
  • 如果你移除的是main文件里的use tests::eat_at_restaurant;:use本质只是把对应路径的项引入当前作用域的语法糖,不是调用的必要条件。移除后只要把main里的调用改成完整路径tests::eat_at_restaurant(),一样可以正常运行。

无法在main中直接调用hosting::add_to_waitlist的原因

核心是你没有把hosting导入到main的作用域,也没有写完整路径:
你在tests模块里写的pub use是把hosting重导出为tests模块的公开API,也就是说hosting对外的公开路径是tests::hosting,不是根路径下直接的hosting。你在main里要直接用hosting的话,需要先加use tests::hosting;导入,或者调用时写完整路径tests::hosting::add_to_waitlist()。

use前加pub和不加的区别

两者的核心差异是导入的项是否对外暴露:

  • 不加pub的普通use:属于模块私有导入,导入的项只能在当前模块内部使用,外部模块无法通过当前模块的路径访问到你导入的内容
  • 加了pub的use:属于公开重导出(re-export),导入的项会成为当前模块公开API的一部分,外部模块可以直接通过当前模块的路径访问到被导入的内容。你示例里的写法就是典型的重导出场景,相当于把原本藏在front_of_house内部的hosting模块,提升到tests模块的顶层对外暴露,不用让用户感知到front_of_house这个内部层级。

内容的提问来源于stack exchange,提问作者Fayeure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:18:03