Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Import Rust导入:将大文件拆分为小文件_Import_Rust - Fatal编程技术网

Import Rust导入:将大文件拆分为小文件

Import Rust导入:将大文件拆分为小文件,import,rust,Import,Rust,我正在rust中编写一个TUI应用程序来管理一些游戏服务器。应用程序本身工作正常,但main.rs文件现在超过1k行,因此我决定将其拆分为多个文件,以便于使用。每个文件都需要能够访问其他文件中的结构和函数。分割文件具有以下结构 src \ main.rs render.rs ark.rs db.rs 这是我目前的货物 [package] name = "ark-manager" version = "0.1.0" auth

我正在rust中编写一个TUI应用程序来管理一些游戏服务器。应用程序本身工作正常,但main.rs文件现在超过1k行,因此我决定将其拆分为多个文件,以便于使用。每个文件都需要能够访问其他文件中的结构和函数。分割文件具有以下结构

src \
    main.rs
    render.rs
    ark.rs
    db.rs
这是我目前的货物

[package]
name = "ark-manager"
version = "0.1.0"
authors = ["Nan0Scho1ar <scorch267@gmail.com>"]
edition = "2018"

[dependencies]
crossterm = { version = "0.19", features = [ "serde" ] }
serde = {version = "1.0", features = ["derive"] }
serde_json = "1.0"
chrono = { version = "0.4", features = ["serde"] }
rand = { version = "0.7.3", default-features = false, features = ["std"] }
tui = { version = "0.14", default-features = false, features = ['crossterm', 'serde'] }
thiserror = "1.0"
方舟

pub mod ark{
发布使用板条箱::呈现::*;
酒吧使用板条箱::db::*;
//结构、枚举等
发布枚举事件{
输入(I),
打上钩
}
...
}
分贝卢比

pub mod db{
发布使用板条箱::呈现::*;
酒吧用板条箱::方舟::*;
//数据库功能
...
}
渲染

pub mod render{
酒吧使用板条箱::db::*;
酒吧用板条箱::方舟::*;
//渲染函数
...
}
我还更新了对现在在单独模块中的内容的引用

//E.G.
if let Ok(_) = tx.send(Event::Tick) {
//Becomes
if let Ok(_) = tx.send(ark::Event::Tick) {
//And
Event::Input(event) => match event.code {
//Becomes
ark::Event::Input(event) => match event.code {
但这导致了以下错误

error[E0433]: failed to resolve: could not find `Event` in `ark`
  --> src/main.rs:79:45
   |
79 |                 if let Ok(_) = tx.send(ark::Event::Tick) {
   |                                             ^^^^^ could not find `Event` in `ark`

error[E0433]: failed to resolve: could not find `Event` in `ark`
   --> src/main.rs:216:22
    |
216 |                 ark::Event::Input(event) => match event.code {
    |                      ^^^^^ could not find `Event` in `ark`

error[E0433]: failed to resolve: could not find `Event` in `ark`
   --> src/main.rs:226:22
    |
226 |                 ark::Event::Tick => {}
    |                      ^^^^^ could not find `Event` in `ark`

error[E0433]: failed to resolve: could not find `Event` in `ark`
   --> src/main.rs:230:22
    |
230 |                 ark::Event::Input(event) => match event.code {
    |                      ^^^^^ could not find `Event` in `ark`

...
error[E0432]: unresolved import `db`
 --> src/render.rs:1:9
  |
1 |     use db;
  |         ^^ no external crate `db`

error[E0432]: unresolved import `ark`
 --> src/render.rs:2:9
  |
2 |     use ark;
  |         ^^^ no external crate `ark`

error[E0432]: unresolved import `render`
 --> src/db.rs:1:9
  |
1 |     use render;
  |         ^^^^^^ no external crate `render`

error[E0432]: unresolved import `ark`
 --> src/db.rs:2:9
  |
2 |     use ark;
  |         ^^^ no external crate `ark`

error[E0432]: unresolved import `render`
 --> src/ark.rs:1:9
  |
1 |     use render;
  |         ^^^^^^ no external crate `render`

error[E0432]: unresolved import `db`
 --> src/ark.rs:2:9
  |
2 |     use db;
  |         ^^ no external crate `db`

...
经过一段时间的尝试,我决定看看其他人是如何解决这个问题的,我发现了一些关于堆栈溢出的问题的答案,比如这个。 我尝试使用公认答案中列出的导入,看起来像这样

梅因

modrender;
mod db;
摩德方舟;
//主回路等
...
方舟

使用渲染;
使用数据库;
//结构、枚举等
...
分贝卢比

使用渲染;
使用方舟;
//数据库功能
...
渲染

使用db;
使用方舟;
//渲染函数
...
但这种结构会导致以下错误

error[E0433]: failed to resolve: could not find `Event` in `ark`
  --> src/main.rs:79:45
   |
79 |                 if let Ok(_) = tx.send(ark::Event::Tick) {
   |                                             ^^^^^ could not find `Event` in `ark`

error[E0433]: failed to resolve: could not find `Event` in `ark`
   --> src/main.rs:216:22
    |
216 |                 ark::Event::Input(event) => match event.code {
    |                      ^^^^^ could not find `Event` in `ark`

error[E0433]: failed to resolve: could not find `Event` in `ark`
   --> src/main.rs:226:22
    |
226 |                 ark::Event::Tick => {}
    |                      ^^^^^ could not find `Event` in `ark`

error[E0433]: failed to resolve: could not find `Event` in `ark`
   --> src/main.rs:230:22
    |
230 |                 ark::Event::Input(event) => match event.code {
    |                      ^^^^^ could not find `Event` in `ark`

...
error[E0432]: unresolved import `db`
 --> src/render.rs:1:9
  |
1 |     use db;
  |         ^^ no external crate `db`

error[E0432]: unresolved import `ark`
 --> src/render.rs:2:9
  |
2 |     use ark;
  |         ^^^ no external crate `ark`

error[E0432]: unresolved import `render`
 --> src/db.rs:1:9
  |
1 |     use render;
  |         ^^^^^^ no external crate `render`

error[E0432]: unresolved import `ark`
 --> src/db.rs:2:9
  |
2 |     use ark;
  |         ^^^ no external crate `ark`

error[E0432]: unresolved import `render`
 --> src/ark.rs:1:9
  |
1 |     use render;
  |         ^^^^^^ no external crate `render`

error[E0432]: unresolved import `db`
 --> src/ark.rs:2:9
  |
2 |     use db;
  |         ^^ no external crate `db`

...
将main.rs文件拆分为4个较小文件的正确方法是什么,这样每个文件都可以使用其他文件中的结构和函数。

在main中:

mod render;
mod db;
mod ark;
然后在其他方面:

use crate::render;
use crate::db;
// ...

我是否需要在每个文件的顶部列出每个结构和函数?如果我尝试类似于
的方法,请使用clarate::render::*它不工作。但如果没有它,编译器似乎建议每次遇到不同文件中的函数或结构时,我都需要添加一个导入。换句话说,是否有一种方法可以一次导入整个文件“如果我尝试使用
crainte::render::*;
这样的方法,它不起作用。”-这种情况下会出现什么错误?如果您有
mod render
lib.rs
中,此导入应该可以工作,模块名称冲突
在db.rs的顶部,我遇到了一些错误,比如
在“ark”中找不到“Event”
。如果我在文件中手动指定每个struct/enum/func等,比如
使用claret::ark::{Event,MenuItem},然后它工作正常。事后看来,这可能是因为我将此
Event::Input(Event)=>match Event.code{
更改为此
ark::Event::Input(Event)=>match Event.code{
当我第一次尝试它时。我已经撤消了该更改,但我已经手动指定了几乎所有更改。为了向其他人澄清,我将尝试注释它,并用简单的版本替换它。如果我更改
使用板条箱::渲染:{read_db};
返回
使用板条箱::渲染;
我得到错误
错误[E0425]:在此范围内找不到函数“read_db”
,即使该函数是公共函数。我现在只想手动指定所有内容,但如果还有其他内容需要测试,请告诉我。您的单个文件不应具有该函数{
wrapper。由于
main.rs
中的
mod X;
行,文件本身已经是一个模块。