我正在尝试从位于单独文件中的模块调用函数,该函数是公共的,我使用完整路径调用它,但是rustc仍然抱怨“未解析的名称”。
pub mod b;
fn main() {
b::f()
}
pub mod b {
pub fn f(){
println!("Hello World!");
}
}
$ rustc a.rs
a.rs:3:5: 3:9 error: unresolved name `b::f`.
当我将模块移动到包装箱的主文件时,一切正常。
pub mod b {
pub fn f(){
println!("Hello World!");
}
}
fn main() {
b::f()
}
这两种方式不应该是等价的吗? 我做错了什么,或者是生锈的错误?
答案 0 :(得分:11)
当您有单独的文件时,它们会自动被视为单独的模块。
因此,您可以这样做:
<强> othermod.rs 强>
pub fn foo() {
}
pub mod submod {
pub fn subfoo() {
}
}
<强> main.rs 强>
mod othermod;
fn main () {
othermod::foo();
othermod::submod::subfoo();
}
请注意,如果您使用子目录,则 mod.rs 文件是特殊的,将被视为模块的根目录:
<强>目录/ file.rs 强>
pub fn filebar() {
}
<强>目录/ mod.rs 强>
pub mod file;
pub fn bar() {
}
<强> main.rs 强>
mod directory;
fn main() {
directory::bar();
directory::file::filebar();
}