这里是我想知道的代码:( 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
以某种方式既是模块又是函数?
答案 0 :(得分:4)
模块
b
和函数b
是否冲突?
不,因为他们在不同的名称空间中。他们以同样的方式发生冲突"重新 c ord"和" 重新 cord"英语冲突:它们拼写和听起来相同,但意思不同,你可以根据背景判断哪一个是什么。
您无法呼叫模块,因此b()
无法谈论模块。函数没有子项,因此b::b
无法讨论函数。当您考虑struct S(i32);
之类的内容时,这很重要。 S
两者一种类型(结构类型本身)和一个函数(构造函数)。