Rust 为什么具有子模块和名称冲突的函数的模块可以工作?

Rust 为什么具有子模块和名称冲突的函数的模块可以工作?,rust,Rust,下面是我想知道的代码:() 为什么b::b()起作用?模块b和功能b是否应该冲突?这是否意味着a::b在某种程度上既是一个模块又是一个函数 模块b和功能b是否应该冲突 不,因为它们在不同的名称空间中。它们的冲突方式与英语中“record”和“record”的冲突方式相同:它们的拼写和发音相同,但意思不同,你可以根据上下文来判断哪个是 您不能调用模块,因此b()不能谈论模块。函数没有子项,因此b::b不能谈论函数。当你考虑诸如结构(s)(i32)时,这是很重要的;代码>S既是一种类型(结构类型本身

下面是我想知道的代码:()

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

模块
b
和功能
b
是否应该冲突

不,因为它们在不同的名称空间中。它们的冲突方式与英语中“record”和“record”的冲突方式相同:它们的拼写和发音相同,但意思不同,你可以根据上下文来判断哪个是

您不能调用模块,因此
b()
不能谈论模块。函数没有子项,因此
b::b
不能谈论函数。当你考虑诸如<代码>结构(s)(i32)时,这是很重要的;代码>
S
既是一种类型(结构类型本身)又是一种函数(构造函数)。

同样有效。
mod a {
    pub mod b {
        pub fn b() {
            println!("b");
        }
    }

    pub use self::b::b;
}

use a::b;

fn main() {
    b();
    b::b();
}