gpt4 book ai didi

rust - 为什么 Rust 需要知道模块中的代码属于谁?

转载 作者:行者123 更新时间:2023-11-29 08:34:17 24 4
gpt4 key购买 nike

我遇到了一些问题reading the Rust documentation :

In this example, we have three modules again: client, network, and network::client. Following the same steps we did earlier for extracting modules into files, we would create src/client.rs for the client module. For the network module, we would create src/network.rs. But we wouldn’t be able to extract the network::client module into a src/client.rs file because that already exists for the top-level client module! If we could put the code for both the client and network::client modules in the src/client.rs file, Rust wouldn’t have any way to know whether the code was for client or for network::client

为什么 Rust 需要知道 client.rs 中的代码属于 clientnetwork::client?它可以属于两者吗?

最佳答案

编译器有关于外部模块的源文件可以放在哪里的规则。这些规则确保不会有两个模块使用相同的源文件

如果你真的想要,你可以用 #[path] 覆盖规则 attribute :

mod client; // defaults to client.rs relative to the current file

mod network {
#[path="client.rs"] // reads the same source as the outer `mod client;`
mod client;
}

但是,这样做会导致重复代码,即 client.rs 中的代码将被编译两次,并且 client.rs 中定义的所有内容都将被定义两次,在两个单独的模块中。就好像您将 network/client.rs 制作成 client.rs 的精确副本并且没有写入 #[path] 属性。

您可以做的另一件事是通过在别处重新导出 为模块提供一个别名。这在构建库时非常有用:它使您能够呈现与内部模块层次结构不同的外部模块层次结构。

mod client; // not accessible externally

pub mod network {
pub use client; // network::client::* will refer to the same definitions as client::*
}

例如上面,client模块定义在client.rs中,但是客户端通过my_crate::network::client<来使用它.

关于rust - 为什么 Rust 需要知道模块中的代码属于谁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48727483/

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