作为一个训练练习,我正在用锈编写一个类似于figlet的简单程序,它将标准输入转换成大字体,像这样:
$ echo "Fancy text" | myprogram
输出:
_____ _ _
| ___| __ _ _ __ ____ _ _ | |_ ___ __ __ | |_
| |_ / _` | | '_ \ / ___| | | | | | __| / _ \ \ \/ / | __|
| _| | (_| | | | | | | (___ | |_| | | |_ | ___/ > < | |_
|_| \__,_| |_| |_| \____| \__, | \__| \____| /_/\_\ \__|
|___/
一切正常,但是我的lib.rs
变得很大,因为这个功能:
pub fn char_to_struct(caractere: char) -> Lettre {
match caractere {
'A' => Lettre {
line1: r#" _ "#,
line2: r#" / \ "#,
line3: r#" / _ \ "#,
line4: r#" / ___ \ "#,
line5: r#"/_/ \_\ "#,
line6: r#" "#,
},
'B' => Lettre {
line1: r#" ____ "#,
line2: r#"| __ ) "#,
line3: r#"| _ \ "#,
line4: r#"| |_) | "#,
line5: r#"|____/ "#,
line6: r#" "#,
},
// etc.
}
它大约有900行,我想将其放入其自己的文件中,以用于实际和学习目的。
我选择命名文件alphabet.rs
,然后将其放入src/
,如下所示:
.
├── Cargo.lock
├── Cargo.toml
├── src
│ ├── alphabet.rs
│ ├── lib.rs
│ └── main.rs
我掌握了基本的模块化。在mod lib
中写入main.rs
,并使用use lib::some_function
调用函数。
但是我没办法
alphabet.rs
中导入lib.rs
(以调用其char_to_struct()
函数)lib.rs
中导入alphabet.rs
(以使用在那里定义的结构)我不知道为什么在mod alphabet
中可以接受写main.rs
但在lib.rs
中不接受:
找不到模块alphabet
的文件 帮助:在目录“ src”中将文件命名为lib / alphabet.rs或lib / alphabet / mod.rs
我创建了目录,重命名了内容,编写了所有内容,尝试了一切,并多次对文档进行了敲击。
正如Lukas Kalbertodt所解释的,我将lib.rs
重命名为util.rs
(我想这没有那么危险),并且像这样编辑我的文件:
main.rs
mod util;
mod alphabet;
use util::some_function;
fn main() { ... }
util.rs
use crate::alphabet::char_to_struct;
pub fn some_function() { ... }
pub struct Mystruct { ... }
alphabet.rs
use crate::util::Mystruct { ... }
pub fn char_to_struct() { ... }
而且效果很好。