Rust语言

关注公众号 jb51net

关闭
首页 > 软件编程 > Rust语言 > Rust包和Crate

Rust包和Crate超详细讲解

作者:上后左爱

这篇文章主要介绍了Rust包管理和Crate,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

包和crate

$ cargo new my-project
     Created binary (application) `my-project` package
$ ls my-project
Cargo.toml
src
$ ls my-project/src
main.rs

Cargo 遵循一个约定 src/main.rs是一个与包同名二进制crate的根,如果包中同时包含src/main.rs, src/lib.rs 表示拥有多个与包同名的crate, 每个src/bin 文件都会被编译成独立的库

模块控制作用域与私有性

模块能够将库中代码进行分组, 提供可读性和重用性

use 引入外部依赖, pub公有关键字, as关键字 glob运算符。

// 一个包包含其他内置函数模块的 front_of_house
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() {}
    }
}
crate
 └── front_of_house
     ├── hosting
     │   ├── add_to_waitlist
     │   └── seat_at_table
     └── serving
         ├── take_order
         ├── serve_order
         └── take_payment

###模块中路径

mod front_of_house {
    mod hosting {
        fn add_to_waitlist() {}
    }
}
pub fn eat_at_restaurant() {
    // 绝对路径
    crate::front_of_house::hosting::add_to_waitlist();
    // 相对路径
    front_of_house::hosting::add_to_waitlist();
}

如上此代码不能编译 原因在于 hosting 在 mod的内部, 属于私有的模块 不能被外部调用 ,rust中默认所有项(函数、方法、结构体、枚举、模块和常量)都是私有的。

父模块不能使用子模块的所有项,但是子模块可以,如果想要外部调用 必须的要增加 pub 关键字进行暴露

pub fn eat_at_restaurant() {
    // 绝对路径
    crate::front_of_house::hosting::add_to_waitlist();
    // 相对路径
    front_of_house::hosting::add_to_waitlist();
}

use 进行模块引入

mod front_of_house {
    pub mod hosting {
        pub fn add_to_waitlist() {}
        fn seat_at_table() {}
    }
    mod serving {
        fn take_order() {}
        fn serve_order() {}
        fn take_payment() {}
    }
}
use crate::front_of_house::hosting;
use self::front_of_house::hosting;
pub fn eat_at_restaurant() {
    hosting::add_to_waitlist();
}

解决将两个同类型引入同一个作用域 导致rust编译错误问题 使用as 关键字解决此等问题

use std::fmt::Result;
use std::io::Result as IoResult;

pub use 能够让其他人导入他们自己的作用域

pub use crate::front_of_house::hosting

使用外部包的话需要Cargo.toml 下面增加

rand = "0.8.3"

到此这篇关于Rust包和Crate超详细讲解的文章就介绍到这了,更多相关Rust包和Crate内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文