gpt4 book ai didi

rust - 如何从嵌套目录访问嵌套模块/文件

转载 作者:行者123 更新时间:2023-12-03 11:37:00 24 4
gpt4 key购买 nike

假设我的项目中有这个文件结构:

.
├── Cargo.lock
├── Cargo.toml
├── src
│   ├── hotel
│   │   ├── guest.rs
│   │   ├── hotel_manager.rs
│   │   └── hotel.rs
│   ├── lib.rs
│   └── main.rs
hotel_menager我只声明我将使用 hotelguest模块:
pub mod hotel;
pub mod guest;
然后里面 lib.rs我声明我将使用 hotel_manager模块:
pub mod hotel_manager;
最后我想使用 hotelguest在我的 main.rs 二进制 但我收到此错误:

file not found for module hotel_manager


然后我想也许我应该使用 use但它也没有任何帮助:
use crate::hotel::hotel_manager;

unresolved import crate::hotel.


我的 Cargo.toml :
[package]
name = "learn_file_spliting"
version = "0.1.0"
authors = ["kaczor6418 <test@test.com>"]
edition = "2018"

[lib]
name = "lib"
path = "src/lib.rs"

[[bin]]
name = "main"
path = "src/main.rs"
如何在 lib.rs 中使用此嵌套模块然后在 main.rs 中使用重新导出的模块?
我知道如果我创建 hotel_manager/src目录然后一切都会工作,但我想要这个 hotel_manager嵌套目录中的模块并学习如何使用嵌套模块。

最佳答案

在 Rust 中,您不能通过简单地将模块存在于目录树中来创建模块。您必须使用 mod module_name; 显式声明它陈述。这不仅声明了一个名为 module_name 的模块。使用时,它声明这样的模块根本存在。pub mod hotel_manager;不适用于 src/lib.rs因为这试图创建一个名为 hotel_manager 的子模块在 crate 的根模块中,它必须存在于 src/hotel_manager.rs 中或 src/hotel_manager/mod.rs ——而且都不存在。
进口 crate::hotel::hotel_managersrc/lib.rs不起作用,因为您从未声明过 pub mod hotel;src/lib.rs ,因此,没有名为 crate::hotel 的模块此时存在。
基本上,对于 hotel_manager模块存在于 src/hotel/hotel_manager.rs , 它必须被声明为 a crate::hotel 的子模块模块,它本身需要在根模块中声明。
做你想做的事情的方法是在src/lib.rs中写下以下内容:

pub mod hotel;
这个子模块名为 hotel必须存在于 src/hotel.rssrc/hotel/mod.rs .由于我们希望它有更多的子模块,按照惯例,使用后者。所以创建一个名为 src/hotel/mod.rs 的文件,内容如下:
pub mod guest;
pub mod hotel_manager;
pub mod hotel;
这将创建一个我们想要的正确的模块结构 hotel作为根模块的子模块,它包含更多名为 guest 的子模块, hotel_managerhotel .
然后,在 crate::hotel::hotel_manager模块,而不是使用 mod语句,您应该使用以下语句,将已在其他地方声明的模块导入当前范围:
use crate::hotel::guest;
use crate::hotel::hotel;
请注意,在 Rust 中,您可以导入比整个模块更小的项目。例如,如果您有一个名为 Hotel 的结构。在 crate::hotel::hotel模块,您只能使用 use crate::hotel::hotel::Hotel; 之类的语句导入该模块

关于rust - 如何从嵌套目录访问嵌套模块/文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63766141/

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