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

关于Rust中use语句作用域范围及模块间作用域差异的技术疑问

关于Rust中use语句作用域范围及模块间作用域差异的技术疑问

我一直搞不懂Rust里use语句的作用域为什么和变量的作用域差这么大?尤其是为什么在新定义的模块里,之前的use语句就失效了?我写了一段参考官方文档改编的代码:

mod front_of_house {
    pub mod hosting {
        pub fn add_to_waitlist() {}
    }
}

use crate::front_of_house::hosting;
fn foo() { }

mod customer {
    pub fn eat_at_restaurant() {
        hosting::add_to_waitlist(); // 这里会报错,hosting不在作用域内
        foo(); // 我之前以为这里能运行,但实际上编译不通过
    }
}

官方文档里针对这段代码的解释是:

注意,use只会在它所在的特定作用域内创建路径别名。把eat_at_restaurant函数移到名为customer的新子模块后,这个模块属于和use语句不同的作用域,所以函数体无法编译。

那这里的“作用域”到底指的是什么?用大括号创建新作用域的时候,use语句并不会失效,函数定义也不会。我知道只有在定义新模块的时候才会出现这种情况,想请教两个问题:

  • 为什么模块会导致这种差异?
  • 这些规则在哪里有正式的定义说明?

编辑补充:我之前的问题里有个错误,函数定义和use语句的作用域表现其实几乎完全一致,具体可以看被采纳的答案。

备注:内容来源于stack exchange,提问作者dominikkoller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 09:58:06