Rust包和Crate超详细讲解

 更新时间:2022年12月16日 10:07:04   作者:上后左爱  
这篇文章主要介绍了Rust包管理和Crate,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

包和crate

  • 通过相关功能进行分组和划分不同的功能代码, 将代码分割成多个模块和多个文件组织代码, 一个包包含 多个crate 和一个可选的crate, Cargo 类似C++ 提供一个工作空间命名 类似JAVA中包空间。
  • 避免重复造轮子, 其他代码通过公关接口进行调用。
  • 模块系统: 包,Crates(模块树形结构,库和二进制项目), 模块, 路径。
  • *crate 是一个二进制项/ 库, rust编译以crate root源文件为起点,包中包含一个Cargo.toml 描述如何构建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

###模块中路径

  • rust如何在一个模块中找到一个项,路径有两种形式, 跟着一个:: 作为分割标识符
  • 绝对路径: 从crate根开始
  • 相对路径 : 以self, super
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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • Rust中引用的具体使用

    Rust中引用的具体使用

    在Rust语言中,引用机制是其所有权系统的重要组成部分,ust提供了两种类型的引用,不可变引用和可变引用,本文就来详细的介绍一下这两种的用法,感兴趣的可以了解一下
    2024-03-03
  • 浅析Rust多线程中如何安全的使用变量

    浅析Rust多线程中如何安全的使用变量

    这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下
    2025-01-01
  • Rust读取配置文件的实现

    Rust读取配置文件的实现

    本文主要介绍了Rust读取配置文件的实现,主要读取Cargo.toml文件,读取.env文件和读取自定义toml文件这三种,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Rust常用功能实例代码汇总

    Rust常用功能实例代码汇总

    通过一系列实用示例展示了Rust在文件操作、网络请求、并发编程、命令行工具以及数据库操作等方面的应用,这些示例不仅展示了 Rust 的强大功能,还提供了实际开发中的指导和参考,通过这些示例,您可以更好地理解 Rust 的特性,并将其应用于您的项目中
    2024-12-12
  • Rust中vector的详细用法

    Rust中vector的详细用法

    Rust和C++同样也有vector概念,本文主要介绍了Rust中vector的详细用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03
  • 一文学会Rust语言如何操作JSON

    一文学会Rust语言如何操作JSON

    JSON在Web开发中被广泛应用于数据交换,本文主要介绍了Rust语言操作JSON,包括序列化、反序列化、JSON创建等多个方面,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Rust文本处理快速入门

    Rust文本处理快速入门

    编程过程中有许多类型的数据要处理,其中文本处理必不可少,本文主要介绍了Rust文本处理快速入门 ,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03
  • 浅谈Rust += 运算符与 MIR 应用

    浅谈Rust += 运算符与 MIR 应用

    这篇文章主要介绍了Rust += 运算符与 MIR 应用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • Windows系统下安装Rust环境超详细教程

    Windows系统下安装Rust环境超详细教程

    这篇文章主要介绍了如何在Windows系统上安装mingw64和Rust,mingw64是一个轻便的C语言编译环境,可以替代Rust默认使用的Visual Studio,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • Rust实现AES加解密详解

    Rust实现AES加解密详解

    这篇文章主要为大家详细介绍了如何利用Rust语言实现AES加解密算法,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以了解一下
    2022-10-10

最新评论