为什么生锈无法在子模块中找到功能?

时间:2014-08-31 08:49:07

标签: module rust

我正在尝试从位于单独文件中的模块调用函数,该函数是公共的,我使用完整路径调用它,但是rustc仍然抱怨“未解析的名称”。

a.rs

pub mod b;
fn main() {
  b::f()
}

b.rs

pub mod b {
    pub fn f(){
        println!("Hello World!");
    }
}

汇编

$ rustc a.rs
a.rs:3:5: 3:9 error: unresolved name `b::f`.

当我将模块移动到包装箱的主文件时,一切正常。

one_file.rs

pub mod b {
    pub fn f(){
        println!("Hello World!");
    }
}
fn main() {
    b::f()
}

这两种方式不应该是等价的吗? 我做错了什么,或者是生锈的错误?

1 个答案:

答案 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();
}