Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/131.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
Rust 如何在多个文件中使用一个文件中的函数?_Rust - Fatal编程技术网

Rust 如何在多个文件中使用一个文件中的函数?

Rust 如何在多个文件中使用一个文件中的函数?,rust,Rust,我正在尝试将一个文件中的函数与多个其他文件一起使用 当我尝试将“mod somefile”添加到文件中时,Rust编译器希望它们嵌套在子文件夹中,这不是我想要构建项目的方式,因为这意味着每次都要复制文件 // src/main.rs mod aaa; mod bbb; fn main() { aaa::do_something(); bbb::do_something_else(); } 我希望能够将src/zzz.rs保留在根src文件夹中,并在项目中的任何其他文件中使用其

我正在尝试将一个文件中的函数与多个其他文件一起使用

当我尝试将“mod somefile”添加到文件中时,Rust编译器希望它们嵌套在子文件夹中,这不是我想要构建项目的方式,因为这意味着每次都要复制文件

// src/main.rs
mod aaa;
mod bbb;

fn main() {
    aaa::do_something();
    bbb::do_something_else();
}
我希望能够将src/zzz.rs保留在根src文件夹中,并在项目中的任何其他文件中使用其功能,而不必将其复制到每个文件的子文件夹中,例如:src/aaa/zzz.rs、src/bbb/zzz.rs。

您需要mod zzz;只有一次在大城市

在aaa.rs和bbb.rs中,您需要一个使用板条箱::zzz;,不是mod zzz

例如:

文件src/aaa.rs:

文件src/bbb.rs:

文件src/main.rs:

文件src/zzz.rs:

你需要一个mod zzz;只有当您有一个名为aaa的目录,并且其中有一个文件mod.rs和zzz.rs时,才在aaa模块内部。然后你必须把mod zzz;在mod.rs中,使子模块aaa::zzz对程序的其余部分可见。

您需要mod zzz;只有一次在大城市

在aaa.rs和bbb.rs中,您需要一个使用板条箱::zzz;,不是mod zzz

例如:

文件src/aaa.rs:

文件src/bbb.rs:

文件src/main.rs:

文件src/zzz.rs:


你需要一个mod zzz;只有当您有一个名为aaa的目录,并且其中有一个文件mod.rs和zzz.rs时,才在aaa模块内部。然后你必须把mod zzz;在mod.rs中,使子模块aaa::zzz对程序的其余部分可见。

有两个不同的思想流派在竞争。在文件系统层次结构中锁定模块层次结构并没有问题,他们甚至认为这是一个好主意。另一个学派对此深恶痛绝。爪哇和铁锈继承了以前的学校。因此,在您的情况下,您必须从要在多个其他板条箱中重复使用的代码中构建一个板条箱。@BitTickler Java的包和Rust的模块的可能重复是非常不同的。除非将它们与Python的模块或bash的源文件等更为不同的东西进行比较,否则Java的包和Rust的模块看起来更像是截然相反的东西。Java的包是每个目录一个包,包不嵌套,每个文件只属于一个包等。在Rust中,模块嵌套,每个文件可以有多个模块,所以我不明白为什么它们应该属于同一个学派?@Andreytukin,从文件位置的意义上说,它们是。你可能会猜测——这是理所当然的,我不是一个真正的粉丝。有两个不同的思想流派在竞争。在文件系统层次结构中锁定模块层次结构并没有问题,他们甚至认为这是一个好主意。另一个学派对此深恶痛绝。爪哇和铁锈继承了以前的学校。因此,在您的情况下,您必须从要在多个其他板条箱中重复使用的代码中构建一个板条箱。@BitTickler Java的包和Rust的模块的可能重复是非常不同的。除非将它们与Python的模块或bash的源文件等更为不同的东西进行比较,否则Java的包和Rust的模块看起来更像是截然相反的东西。Java的包是每个目录一个包,包不嵌套,每个文件只属于一个包等。在Rust中,模块嵌套,每个文件可以有多个模块,所以我不明白为什么它们应该属于同一个学派?@Andreytukin,从文件位置的意义上说,它们是。你可能会猜到——这是理所当然的,我不是一个真正的粉丝。
// src/aaa.rs
mod zzz; // rust compiler wants the file to be nested in a subfolder as aaa/zzz.rs

pub fn do_something() {
    zzz::do_stuff();
}
// src/bbb.rs
mod zzz; // again, compiler wants the file nested in a subfolder as bbb/zzz.rs

pub fn do_something_else() {
    zzz::do_stuff();
}
// src/zzz.rs

pub fn do_stuff() {
    // does stuff here
}
use crate::zzz; // `crate::` is required since 2018 edition

pub fn do_something() {
    zzz::do_stuff();
}
use crate::zzz;

pub fn do_something_else() {
    zzz::do_stuff();
}
// src/main.rs
mod aaa;
mod bbb;
mod zzz;

fn main() {
    aaa::do_something();
    bbb::do_something_else();
}
pub fn do_stuff() {
    println!("does stuff zzz");
}