为什么Rust中有一个mod关键字?

bit*_*ick 6 module rust

看完这个 我不知道为什么会出现"国防部"关键字mod.rs?文件夹层次结构也可以描述模块?

Chr*_*gan 13

必须明确声明模块的原因有两个:

  • 模块可以是public(pub mod foo;)或private(mod foo;).

  • 它们可以应用属性,属性不能放在文件中; 有两个主要的例子:#[path = "x.rs"]指定一个不同的路径,#[cfg(…)]对于条件编译,对于模块无法解析或扩展其宏的情况.

  • 我还想补充一点,Rust 不会仅仅因为文件存在就编译它们;板条箱中的某处必须有一个模块定义将其拉入。 (2认同)
  • @lllogiq:问题就在这一点上:为什么*不*这样做? (2认同)
  • @llogic:我不同意。实际上,树中的 .rs 文件和模块之间始终存在直接对应关系;如果不是因为条件编译属性很重要,那么实际上就没有理由使用“mod”项——它*可以*被自动处理。坦率地说,我经常觉得如果我们这样做可能会更好,尽管在解析文件的其余部分之前需要稍微更仔细地处理模块属性,并且可能会“稍微”混淆编译器的各个阶段。但确实没有什么根本原因让我们不能没有“mod”项目。 (2认同)

Ste*_*nik 7

虽然它可以,但它也可以被覆盖:

#[path = "somewhere/else"]
mod lol;
Run Code Online (Sandbox Code Playgroud)