gpt4 book ai didi

rust - 什么是包、 crate 和模块?

转载 作者:行者123 更新时间:2023-12-05 06:10:44 27 4
gpt4 key购买 nike

我已阅读 Managing Growing Projects with Packages, Crates, and Modules ,但我仍然不太了解层次结构。我知道什么是 crate ,并且包中应该至少有一个 crate :最多 1 个库 crate 和 0 个或更多二进制 crate 。

首先:假设我想在包中同时包含 lib.rsmain.rs crate。如何从 main.rs 中的 lib.rs 访问/调用函数?

第二:当我使用 cargo new --lib library-name 创建新库时,它会创建具有该名称的目录和一堆文件,这是我想出从该库调用函数的唯一方法在 src/main.rs 中是:

mod some_library;
use crate::library_name::library_name::foo;

fn main() {
foo();
}
// Filename: src/library_name.rs
pub mod library_name; // I don't really understand this

// Filename: src/library_name/library_name.rs
pub fn foo() {
// ...
}

我有以下层次结构:

 - package_name
- src
- library_name
- src
- lib.rs
- Cargo.toml
- library_name.rs

- library_name.rs
- main.rs

- Cargo.toml

src/library_name.rs 是否需要与src/library_name 库同名?我真的很困惑。

最佳答案

它是三或四级的层次结构。

  1. 工作区(可选):顶部有 workspace .一个工作区由一个或多个包组成。 Cargo.toml 文件很特殊,或多或少只列出了工作区成员。

    工作区是可选的,用于大型项目。只有一个包的较小项目不需要它们。在这种情况下,我们可以忽略工作区。我们在顶部有一个包,层次结构只有三层深。

  2. :然后是package .一个包就是一个真正的 Cargo.toml 文件。一个包可以编译成 crate。

  3. crate :A crate是从包编译的库或可执行文件。库 crate 以 lib.rs 文件作为起点。可执行文件箱以 main 函数作为起点。一个包最多可以编译成一个库和几个可执行文件。

  4. 模块:然后就是modules .模块是 Rust 在源代码中组织 items 的分层方式,例如 structenum、函数和其他。

以及如何使用它为项目赋予唯一的名称?

答案:完全限定名称以包开头,然后是一系列模块名称,最后是项目名称。

一个例子:

serde::de::value::StringDeserializer ( see here ) 作为包 serde,作为模块路径 de 然后 value 然后 struct 被称为 StringDeserializer

箱子在哪里?

serde 包只有一个 crate,即库。如果您查看包的 Cargo.toml,则没有列出任何二进制文件。

(人们往往对包和 crate 感到困惑。甚至有时我并不准确,当我指的是包时会说“serde crate”。)

简而言之: 是一个名称下的代码(例如serde)。 crate 是一个库或可执行文件。

关于rust - 什么是包、 crate 和模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64305657/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com