如何从同一项目的同一目录中的另一个文件中包含文件?

3
我在Rust中开始了一个新项目(这是我的第一个Rust项目,也是我接触的第一种编程语言)。我在main.rs中添加了一些函数、类型和单元测试。然后我想将它移动到两个新文件foo.rsbar.rs中。 我该如何从foo.rs导入/包含/使用bar.rs
我已经阅读过:

它们都没有以下结构

src/
|-- main.rs
|-- foo.rs
|-- bar.rs

这里是指 foo.rs 尝试使用 bar.rs 的内容。


如果我尝试直接从foo.rs使用在bar.rs中声明的Bar类型,我会得到以下错误信息:
error[E0433]: failed to resolve: use of undeclared type or module `Bar`
  --> src/foo.rs

如果我在foo.rs的开头添加mod bar并不会更好:
error[E0583]: file not found for module `bar`
 --> src/foo.rs
  |
1 | mod bar;
  |     ^^^
  |
  = help: name the file either foo/bar.rs or foo/bar/mod.rs inside the directory "src"

最后(但我并不指望这个会起作用),在foo.rs中使用use bar;

error[E0432]: unresolved import `bar`
 --> src/foo.rs
  |
1 | use bar;
  |     ^^^ no `grammar` external crate

在一个主要的模块(main.rs、lib.rs或subdir/mod.rs)中,你需要为你整个项目(或子目录)中想要使用的所有其他模块编写mod a;。在任何其他模块中,你需要编写use a;use a::foo;。你需要同时编写mod bar;use bar;(实际上这里是crate::bar)。 - trent
哦,谢谢。为什么你没有创建一个“真正”的答案,这样我就可以选择它来标记这个问题已经得到解答了呢? - Robin
我当时在手机上,没有时间专心给出一个好的答案。而且,我相当确定这个问题已经在这里得到了解答,我更喜欢将问题链接在一起,而不是写新的答案。我找到了如何使用Cargo/Rust在模块中包含同一目录下的文件?为什么我不能从同一目录下的不同文件导入模块?(后者被标记为你链接的其中一个问题的重复,但它也有自己的答案)。 - trent
1个回答

1

我在这里回答了一个非常类似的问题: https://dev59.com/6l8d5IYBdhLWcg3w1FB0#76659218

目前有两个不同的问题--如何从相关模块(例如helpers.rs)导入代码到你的main.rs,但是与将代码从其他非主要模块导入到其他非主要模块的过程不同。我在上述问题中给出的示例中,使用了位于同一目录下的a.rsb.rsmain.rs,你想要在a.rsb.rs之间导入函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接