.rs文件[rust]

时间:2019-05-13 08:12:01

标签: rust modularity

作为一个训练练习,我正在用锈编写一个类似于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() { ... }

而且效果很好。

0 个答案:

没有答案