生锈mod语句的不一致

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生锈mod语句的不一致相关的知识,希望对你有一定的参考价值。

按照以下链接将模块分成不同文件的示例:https://doc.rust-lang.org/book/ch07-02-modules-and-use-to-control-scope-and-privacy.html#separating-modules-into-different-files

我在src目录下创建了以下文件:

├── main.rs
├── sound
│   └── instrument.rs
└── sound.rs

src/main.rs

mod sound;

fn main() {
  // Absolute path
  crate::sound::instrument::clarinet();

  // Relative path
  sound::instrument::clarinet();
}

src/sound.rs

pub mod instrument;

src/sound/instrument.rs

pub fn clarinet() {
  println!("clarinet");
}

该示例按预期编译和工作。现在我的问题是:为什么在main.rs,它可以从同一目录“修改”sound.rs,而在sound.rs,它必须从子目录“修改”instrument.rs

答案

在标准的Rust bin项目中,src/main.rs被赋予特殊位置作为crate root。 src/中的其他源文件是包装箱顶层的模块。具有多个文件的模块可以采用两种形式之一。旧的方式是这样的:

├── main.rs
└── mod_name
    └── mod.rs
    └── submodule.rs
└── some_other_mod.rs

mod.rs是必需的(具有确切的名称),并将作为模块的顶级。在这种情况下,你可以看到,我敢肯定,src/mod_name/mod.rs直接引用some_other_mod而不用super::crate::作为前缀是没有意义的。

您正在使用的新方法允许您放弃mod.rs并在父mod目录中使用mod_name.rs,其目的与mod.rs相同。当您开始将库作为单个文件开发时,这很方便,然后当您决定添加更多文件时,您不需要重命名和移动顶级文件。

在您的情况下,instrument.rs需要位于sound/目录中才能被视为sound模块的一部分。如果您将它直接放在src/中,它将被视为包装箱中的顶级模块。

以上是关于生锈mod语句的不一致的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis ,实体类里面的变量名称和表里面字段写的不一致,一个是表里是下划线,实体类是大写

Mybatis ,实体类里面的变量名称和表里面字段写的不一致,一个是表里是下划线,实体类是大写

解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段

片段后面的不可见布局被点击:

Java异常处理机制

C++ std::vector 乘法中是不是存在已知的不一致行为?