Module 如何将生锈模块放在单独的文件中?
下面的代码改编自“TheBook”(RustopDocs--book),并以单个.rs文件的形式工作。我只是希望模块驻留在一个单独的文件中。我读过《这本书》的第7章,“用包、板条箱和模块管理不断增长的项目”。我只是不明白“它”。我的想法是,“main”代码属于main.rs,模块可能需要在lib.rs中,但确切的形式和位置仍然是个谜。本章通常说明运行“cargo new/build which”,但没有说明从哪个目录运行。类似地,它声明src/main.rs或src/lib.rs在特定示例中应该是这样或那样的,但不清楚(没有完整路径)一个“src”目录是否实际位于另一个目录的相同位置 所以,我想有不止一种方法可以做到这一点,但我很乐意给出一个相对简单的答案。在本例中,我只关心模块是否可以从下面的main()函数访问Module 如何将生锈模块放在单独的文件中?,module,rust,package,Module,Rust,Package,下面的代码改编自“TheBook”(RustopDocs--book),并以单个.rs文件的形式工作。我只是希望模块驻留在一个单独的文件中。我读过《这本书》的第7章,“用包、板条箱和模块管理不断增长的项目”。我只是不明白“它”。我的想法是,“main”代码属于main.rs,模块可能需要在lib.rs中,但确切的形式和位置仍然是个谜。本章通常说明运行“cargo new/build which”,但没有说明从哪个目录运行。类似地,它声明src/main.rs或src/lib.rs在特定示例中应该
mod guess_mod {
pub struct Guess {
value: i32,
}
impl Guess {
pub fn new(value: i32) -> Guess {
if value < 1 || value > 100 {
panic!("Guess value must be between 1 and 100, got {}.", value);
}
Guess{value}
}
pub fn value(&self) -> i32 {
self.value
}
}
}
use guess_mod::Guess;
fn print_guess_value(guess: Guess) {
println!("The value of the guess is {} ", guess.value());
}
fn main() {
let g = Guess::new(18);
print_guess_value(g);
}
mod guess\u mod{
pub结构猜测{
值:i32,
}
简单猜测{
pub fn new(值:i32)->Guess{
如果值<1 | |值>100{
恐慌!(“猜测值必须介于1和100之间,得到{}.”,value);
}
猜测{value}
}
发布fn值(&self)->i32{
自我价值
}
}
}
使用guess_mod::guess;
fn打印猜测值(猜测:猜测){
println!(“猜测的值是{}”,guess.value());
}
fn main(){
设g=Guess::new(18);
打印值(g);
}
您可以在src
中创建以下文件夹结构:
src
├── guess
│ └── mod.rs
└── main.rs
您的guess模块可以位于名为guess.rs
的文件中,也可以位于名为guess/
的文件夹中,其中包含mod.rs
(如上面的结构所示)
在您的mod.rs
(或guess.rs
)中,您可以放置模块的内容):
您可以从文件夹结构的根目录运行cargo(即src
)
如果rust book对您来说不够清晰,可以通过示例尝试rust:您可以在
src
中创建以下文件夹结构:
src
├── guess
│ └── mod.rs
└── main.rs
您的guess模块可以位于名为guess.rs
的文件中,也可以位于名为guess/
的文件夹中,其中包含mod.rs
(如上面的结构所示)
在您的mod.rs
(或guess.rs
)中,您可以放置模块的内容):
您可以从文件夹结构的根目录运行cargo(即src
)
如果生锈书对你来说不够清楚,也许可以举个例子试试生锈:也许你混淆了板条箱和模块的概念。它们有些关联,但有所不同
- 板条箱是编译、分发、版本控制和依赖关系管理的独立单元
- 模块是逻辑上分离的板条箱的一部分,可视性屏障也可能单独编译,但最终链接在一起,并捆绑到板条箱中
//src/main.rs
mod foo {
pub fn test() {}
}
fn main() {
foo::test();
}
模块#2
将模块写入同一源目录中的单独文件:
//src/main.rs
mod foo;
fn main() {
foo::test();
}
//src/main.rs
mod foo;
fn main() {
foo::test();
}
您可以在名为src/foo
的子目录中添加foo
的子模块
模块#3
将模块写入子目录时,文件必须命名为mod.rs
:
您可以使用子目录src/foo
创建foo
的子模块
板条箱
链接板条箱最简单的方法是将其添加到Cargo.toml
的[dependencies]
部分。那么cargo
就是魔法
创建板条箱时,它可能有0或1个库和0或多个二进制文件。通常的模式是创建双货物项目,该项目包含库和二进制文件。然后您将有一个src/main.rs
和一个src/lib.rs
文件。依赖关系是自动处理的
//src/main.rs
fn main() {
foo::test();
}
对于更复杂的项目,您可以将源代码拆分为几个板条箱,并将它们一起处理到一个工作区中,但我认为这超出了这个问题的范围。也许您将板条箱和模块的概念混为一谈。它们有些关联,但有所不同
- 板条箱是编译、分发、版本控制和依赖关系管理的独立单元
- 模块是逻辑上分离的板条箱的一部分,可视性屏障也可能单独编译,但最终链接在一起,并捆绑到板条箱中
//src/main.rs
mod foo {
pub fn test() {}
}
fn main() {
foo::test();
}
模块#2
将模块写入同一源目录中的单独文件:
//src/main.rs
mod foo;
fn main() {
foo::test();
}
//src/main.rs
mod foo;
fn main() {
foo::test();
}
您可以在名为src/foo
的子目录中添加foo
的子模块
模块#3
将模块写入子目录时,文件必须命名为mod.rs
:
您可以使用子目录src/foo
创建foo
的子模块
板条箱
链接板条箱最简单的方法是将其添加到Cargo.toml
的[dependencies]
部分。那么cargo
就是魔法
创建板条箱时,它可能有0或1个库和0或多个二进制文件。通常的模式是创建双货物项目,该项目具有库和二进制all
//src/lib.rs
pub fn test() {}