«

Rust - Package\Crate\Module

ljierui 发布于 阅读:153 技术杂谈


1、Package\Crate\Module

1.1、Rust的代码组织

1.2、Package和Crate

1.3、Cargo的惯例

1.4、Crate的作用

1.5、定义module来控制作用域和私有性

mod front_of_house{
    mod hosting{
        fn add_to_waitlist(){}
        fn seat_at_table(){}
    }

    mod serving{
        fn take_order() {}
        fn serve_order() {}
        fn take_payment() {}
    }
}

1.6、路径(Path)

mod front_of_house{
    mod hosting{
        fn add_to_waitlist(){}
        fn seat_at_table(){}
    }
}

// 通过路径调用模块
pub fn eat_at_restaurant(){
    // 通过绝对路径调用
    crate::front_of_house::hosting::add_to_waitlist();

    // 通过相对路径调用
    front_of_house::hosting::add_to_waitlist();
}

1.7、私有边界(privacy boundary)

mod front_of_house{
    // pub 关键字让它不是私有的
    pub mod hosting{
        pub fn add_to_waitlist(){}
        fn seat_at_table(){}
    }
}

// 通过路径调用模块
pub fn eat_at_restaurant(){
    // 通过绝对路径调用
    crate::front_of_house::hosting::add_to_waitlist();

    // 通过相对路径调用
    front_of_house::hosting::add_to_waitlist();
}

1.8、super关键字

fn serve_order(){}

mod back_of_house{
    fn fix_incorrect_order() {
        cook_order();
        // 通过super调用serve_order
        super::serve_order();
    }
    fn cook_order() {
    }
}

1.9、use关键字

mod front_of_house{
    // pub 关键字让它不是私有的
    pub mod hosting{
        pub fn add_to_waitlist(){}
        fn seat_at_table(){}
    }
}
// 通过use 调用 front_of_house
use crate::front_of_house::hosting;

// 调用struct的则使用完整路径
use std::collections::HashMap;

// 通过路径调用模块
pub fn eat_at_restaurant(){
    // 通过绝对路径调用
    crate::front_of_house::hosting::add_to_waitlist();

    // 通过相对路径调用
    front_of_house::hosting::add_to_waitlist();

    // 通过use引用后就可以在作用域内调用
    hosting::add_to_waitlist();

    // 调用Hashmap
    let mut map = HashMap::new();
    map.insert(1,2);
}

1.10、使用外部包(package)

rust语言学习

推荐阅读: