Eva*_*oll 35 import include rust
我正在努力解决这些问题
use宣言
use声明创建一个或多个与其他路径同义的本地名称绑定。通常,
use声明用于缩短引用模块项所需的路径。这些声明可能出现在模块和块中,通常位于顶部。
和,
mod物品
模块项是一个模块,用大括号括起来,命名并以关键字 为前缀
mod。模块项将一个新的命名模块引入到构成 crate 的模块树中。模块可以任意嵌套。
基本上,当我去布局我的模块时,我相信我知道我想要如何布局它,但我对这两件事应该如何分层以及它们的作用感到困惑。我认为两者中只有一个会包含代码?
Dmi*_*try 34
假设您有一个my_mod带有 pub 函数的模块my_func。use在包含模块 using 语句之前,您无法在板条箱中(或板条箱外)使用此函数mod my_mod。
包含模块后,您可以像这样使用您的函数:
mod my_mod;
...
my_mod::my_func(...)
...
Run Code Online (Sandbox Code Playgroud)
my_mod::my_func如果您没有将模块包含在板条箱中的某个位置,则无法使用声明。
有时最好导入常用的定义:
mod my_mod;
use my_mod::my_func;
Run Code Online (Sandbox Code Playgroud)
现在,如果你想使用你的函数,你可以写:
my_func(...);
Run Code Online (Sandbox Code Playgroud)
您还可以使用语句重新导出子模块(甚至其他板条箱!)的定义pub use。
如果您使用通过导入的其他包Cargo.toml(通过将它们列为依赖项),您可以仅使用use语句从这些包中导入定义。
Geo*_*rge 17
语言文档尝试但错过了隐含的一些重要概念mod,我不得不进行测试才能弄清楚这一点。为了尝试节省其他人的时间,我提供以下结论......
mod,其中选择相对于其主机模块的直接子模块。重要的是,引用的这些模块文件mod需要保存在子目录中,该子目录 (1) 与主机模块文件位于同一目录中,并且 (2) 该子目录必须与主机模块文件具有相同的名称。这意味着模块不能导入兄弟模块、父母模块、孙子模块或表兄弟模块。*这种分层包含模式的明显例外以及可能造成许多混乱的根源是根模块(main.rs,lib.rs)。src/这些特定的模块文件确实与其子模块一起出现;然而,它们很特别。具体来说,这些板条箱根模块文件(main.rs、lib.rs、bin/other_root.rs)实际上被视为src/目录本身的父模块。(因此,在编译时,它们被视为/src.rs使用关联的子目录命名/src/,或者(更好)作为目录本身src/mod.rs内的根模块命名src/)。Cargo.toml)通过选择目录根目录中的模块来构造源树src/。然后,这些模块可以包括从其关联的模块子目录中选择的模块,然后是从其关联的模块子目录中选择的模块,等等。包含的模块文件的结果树成为板条箱中可用的源代码。重要的是,板条箱根模块(lib.rs、main.rs、bin/other_crate_root.rs)实际上可以从“/src”目录中选择不同的初始模块,从而演化出不同的模块树。use语句现在可以用于缩写模块的路径和/或其外部可见的内容。Yil*_*maz 16
mod关键字就像import语句。您可以访问外部文件中的内容。Rust 需要知道模块的存在。(对于 Cargo.toml 中指定的外部依赖项,Rust 和 Cargo 允许您直接使用它们的项目,而无需手动声明每个 crate。)
// another_file is the name of the file, another_file.rs
// file name is default module
mod another_file
Run Code Online (Sandbox Code Playgroud)
现在你带来了内容。use用于创建顶级路径,以便您可以在多个部分中使用函数或结构。假设您必须到达模块深处的结构:
// mod could be in the same file: my_game::education::learning_rust::Person;
// in main.rs you dont need to use `use crate::another_file`. you would use `use crate` if you were in other module
use another_file::my_game::education::learning_rust::Person;
Run Code Online (Sandbox Code Playgroud)
通过use声明,我们将其纳入Person范围。
然后里面main
fn main(){
let person=Person::new()
person.display_info();
}
Run Code Online (Sandbox Code Playgroud)
如果我不使用use关键字,那么在需要Person结构的地方我会这样写:
let person=another_file::my_game::education::learning_rust::Person::new()
Run Code Online (Sandbox Code Playgroud)
另外,如果您想访问标准库功能,您可以使用use
use std::net;
use std::io::prelude::*;
Run Code Online (Sandbox Code Playgroud)