Import “我该怎么做?”;使用「;或者导入本地生锈文件?

Import “我该怎么做?”;使用「;或者导入本地生锈文件?,import,rust,Import,Rust,如何在main.rs中包含具有完整路径的文件my_project/src/include_me.rs 我已经检查过了,它们似乎都包含一个二进制文件。我也检查过了,但是没有一个例子以“.rs”结尾 如何使include_me.rs与项目的其余部分一起编译 编辑:虽然“可能的副本”将是一个伟大的地方,包括这个问题的答案,但它并不包括它。这个问题的顶部答案中的语法明显更为相关,并且在问题“重复”中掩盖了这一点。在Rust中,基本上有两种(主要)方法包含来自其他地方的代码: 1.“包括”内部代码 如果您

如何在
main.rs
中包含具有完整路径的文件
my_project/src/include_me.rs

我已经检查过了,它们似乎都包含一个二进制文件。我也检查过了,但是没有一个例子以“.rs”结尾

如何使
include_me.rs
与项目的其余部分一起编译

编辑:虽然“可能的副本”将是一个伟大的地方,包括这个问题的答案,但它并不包括它。这个问题的顶部答案中的语法明显更为相关,并且在问题“重复”中掩盖了这一点。

在Rust中,基本上有两种(主要)方法包含来自其他地方的代码:

1.“包括”内部代码 如果您的
include_me.rs
属于您的项目,则应将其移动到位于以下位置的同一文件夹
main.rs

└── src
├── 包括
└── 梅因
然后,您可以在
main.rs
中编写此代码:

mod include\u me;
fn main(){
//调用另一个文件(模块)中定义的函数
include_me::some_function();
}
mod
声明使Rust编译器自动查找相应的
.rs
文件

因此,属于您的项目的所有内容都与
main.rs
(或
lib.rs
)所在的文件夹属于同一文件夹(或其子文件夹)。然后通过模块系统“包括”文件。要阅读模块的良好介绍,请阅读。你也可以看看这个话题。模块系统是非常核心的,因此对于学习Rust非常重要

2.“包括”外部代码 如果您的
include_me.rs
不属于您的实际项目,而是您在多个项目中使用的有用内容的集合,那么它应该被视为一个库。要包含此类外部库的代码,必须将其作为外部板条箱包含。为了让你的生活更轻松,你真的想用货

因此,让我们准备您的
include_me.rs
as Cargo library项目。您需要以下文件结构(由新my_库--lib自动生成):

。我的图书馆
  ├── 货舱
  └── src
      └── 图书馆
现在,将所有内容从
include_me.rs
复制到
lib.rs
(调用库项目的根文件
lib.rs
)中。假设
my\u library
文件夹的完整路径是
~/code/my\u library

现在,让我们准备您的主要项目的货运项目。它有一个类似的文件 结构(但是是
main.rs
而不是
lib.rs
,因为它是一个可执行项目,而不是库项目):

。我的计划
├── 货舱
└── src
└── 梅因
要声明您对
my_库的依赖关系,您必须将其放入您的
货物中。toml

[package]
name = "my_project"
version = "0.1.0"
authors = ["you"]
edition = "2018"

[dependencies]
my_library = { path = "~/code/my_library" }
您也可以使用相对路径(
“./my_library”
),但只有当您知道两个项目始终保持相对位置(就像它们都在同一个存储库中管理一样)时,才有意义

现在,您可以在
main.rs
中编写:

使用我的_库::一些_函数();
fn main(){
//调用另一个文件(extern板条箱)中定义的函数
一些函数();
}
如果您想上传这两个项目中的任何一个,您必须与
crates.io
(或者另一个crates注册表,如果您的公司有),但这是另一个主题

(注意:不久前,有必要在
main.rs
内部编写
extern-claret my_库;
。这不再是必需的,但您可能会发现带有
extern-claret
声明的旧代码。)

还有别的办法吗?
是的,但是你不应该用那些。有一个允许您逐字包含其他文件的方法,就像C-land中的
#include
一样但是,强烈建议在模块系统能够解决您的问题的情况下使用此选项<代码>包含!()
仅在非常特殊的情况下有用,通常链接到更复杂的生成代码的构建系统。

不,我在上面链接了它。你很清楚,因为它很熟悉。在任何地方都没有包含意味着文件系统导航,即
/path/to/include.rs
。Python做了一件类似的事情,去掉了导入上的扩展,我个人认为它不是惯用的。它使导入看起来不像是与路径相关。不是,你没有链接到我链接到的部分。我链接到的一个有这样的文本:接下来,让我们使用相同的模式将网络模块提取到它自己的文件中[…],然后创建一个新的src/network.rs文件并输入以下内容。我不清楚那一节的哪一部分很难理解。它在几章之内。到那时为止,我读了整本书,这两章中的任何一章似乎都能找到我的答案,但没有。非常感谢,我真的很感激,我想其他人也会这样。尽管这是最基本的,但它是人们独自学习的必要步骤。很明显,mod可以用于包含扩展名为“.rs”或不为“.rs”的内容,但对于新手来说,它似乎只用于从未知字典(类似于io或Math)中提取文件。您的示例是我在任何地方看到的
mod
引用
*.rs
文件的第一个示例,我非常感谢您分享此语法。感谢您花时间回答此问题。非常有用。