为什么带有子模块的模块和名称冲突的函数有效?

时间:2017-04-12 01:53:55

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

为什么b::b()有效?模块b和函数b是否冲突?这是否意味着a::b以某种方式既是模块又是函数?

1 个答案:

答案 0 :(得分:4)

  

模块b和函数b是否冲突?

不,因为他们在不同的名称空间中。他们以同样的方式发生冲突"重新 c ord"和" 重新 cord"英语冲突:它们拼写和听起来相同,但意思不同,你可以根据背景判断哪一个是什么。

您无法呼叫模块,因此b()无法谈论模块。函数没有子项,因此b::b无法讨论函数。当您考虑struct S(i32);之类的内容时,这很重要。 S 两者一种类型(结构类型本身)一个函数(构造函数)。