为什么带有子模块的模块和具有冲突名称的功能为何起作用?

Sun*_*rma 2 rust

这是我想知道的代码:(Rust Playground

mod a {
    pub mod b {
        pub fn b() {
            println!("b");
        }
    }

    pub use self::b::b;
}

use a::b;

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

为什么b::b()起作用?模块b和功能不应该b冲突吗?这是否意味着a::b某种程度上既是模块又是功能?

DK.*_*DK. 5

模块b和功能不应该b冲突吗?

不,因为它们位于不同的名称空间中。他们的冲突以同样的方式“重新Ç ORD”和“ 线”冲突英文:他们在拼写和发音相同,但意味着不同的事情,你可以告诉这是根据上下文。

您不能调用模块,因此b()不能谈论模块。函数没有子项,因此b::b不能谈论函数。当您考虑诸如此类时,这一点很重要struct S(i32);S两个类型(结构类型本身)一个函数(构造)。