31天会用Rust——Day14,模块系统

1,包

包是分享代码的基本单位,一个toml就是一个包。

新建一个包:

cargo new xxx

效果:
在这里插入图片描述

2,Crate

Crate是产生功能的基本单位,是包的子。
一个包至少要有一个Crate。

Crate有两种:
库文件lib:对外部提供功能。
可执行文件bin:生成可执行文件。

lib

一个包,最多一个lib。
lib.rs,当被引用时会导入。

bin

一个包,bin的数量不限制。
main.rs。以及src / bin目录下的所有rs。都会被编译成exe。

3,模块:简单使用

模块是组织代码的基本单位。

简单使用:

pub mod a {
    
    
    pub mod b {
    
    
        pub mod c {
    
    
            pub fn hello() {
    
    
                println!("Hello, world!");
            }
        }
    }
}

use a::b::c::hello;

fn main() {
    
    
    hello();
}

Hello, world!

mod表示模块。
pub表示外部可以访问内部。
a,b,c是嵌套的三个模块。

4,模块:相对路径

同mod下的子mod:

pub mod a {
    
    
    pub mod b {
    
    
        pub mod c {
    
    
            pub fn hello() {
    
    
                println!("Hello, world!");
            }
        }

        pub fn say_hello() {
    
    
            self::c::hello();
        }
    }
}

父mod下的子mod:

pub mod a {
    
    
    pub mod b {
    
    
        pub mod c {
    
    
            pub fn say_hello() {
    
    
                super::hello();
            }
        }

        pub fn hello() {
    
    
            println!("Hello, world!");
        }
    }
}

5,模块:use写法

起别名:

use a::b::c::hello as H;

fn main() {
    
    
    H();
}

导入的同时导出:

pub mod a {
    
    
    pub mod b {
    
    
        pub mod c {
    
    
            pub fn hello() {
    
    
                println!("Hello, world!");
            }
        }
    }

    pub use self::b::c::hello as H;
}

use a::H;

fn main() {
    
    
    H();
}

同时导入多个:

pub mod a {
    
    
    pub fn hello1() {
    
    
        println!("11111");
    }

    pub fn hello2() {
    
    
        println!("22222");
    }
}

use a::{
    
    hello1, hello2};

fn main() {
    
    
    hello1();
    hello2();
}

导入全部:

pub mod a {
    
    
    pub fn hello1() {
    
    
        println!("11111");
    }

    pub fn hello2() {
    
    
        println!("22222");
    }
}

use a::*;

fn main() {
    
    
    hello1();
    hello2();
}

6,模块:拆分文件

一个单独的rs:

pub mod a {
    
    
    pub fn hello() {
    
    
        println!("Hello World!");
    }
}

想加入crate,需要声明:

mod a;

这样,编译器就能够访问这个rs文件。

完整的案例:

mod a;

use a::a::hello;

fn main() {
    
    
    hello();
}

这是绝对路径的写法。
第一个a表示文件名。
第二个a表示模块。

猜你喜欢

转载自blog.csdn.net/qq_37284843/article/details/124208061
今日推荐