关于Rust的项目结构的笔记

news2024/11/13 9:00:35

层级

  • Package
  • Crate
  • Module
  • Path

Package

cargo的特性, 构建、测试、共享Crate

组成:

  • 一个 Cargo.toml 文件, 描述了如何构建这些 Crates
  • 至少包含一个 crate
  • 最多只能包含一个 library crate
  • 可以包含任意个 binary crate

cargo new demo-pro

会产生一个名为 demo-pro 的 Package

目录结构如下:
在这里插入图片描述

cargo 的惯例:

  1. src/main.rs 是 binary crate 的 crate root
    且此crate的名称与package名一致

  2. src/lib.rs 是 library crate 的 crate root (此文件需要自己创建)
    且此crate的名称与package名一致

cargo 会把 crate root 文件交给 rustic 来构建 library 或 binary

  1. 一个package 可以有多个 binary crate
    在这里插入图片描述

Crate

一个模块树, 可以产生一个 library 或 可执行文件


Crate 类型:

  • binary 二进制文件
  • library 库文件

Crate Root:

  • 是源代码文件
  • rustc 从这里开始组成项目的根Module

Module

控制代码的组织、作用域、私有路径


  • 在一个 crate 内可以将代码进行分组
  • 易于复用
  • 控制项目私有性
  • 使用 mod 关键字进行创建
  • 可以嵌套
  • 可以包含其他项的定义(struct , enum, trait, fn)

案例1:

src/lib.rs

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() {}
    }
}

在这里插入图片描述

案例2:

src/lib.rs

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

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

pub fn eat_at(){
    crate::front_of_house::hosting::add_to_waitlist();
}

src/main.rs

fn eat_at2(){
    demo_pro::front_of_house::hosting::add_to_waitlist();
}

fn main() {
    eat_at2();
}

案例3: super

src/lib.rs

pub mod front_of_house {

    fn method1() {}

    pub mod hosting {
        fn method2() {}

        pub fn method3() {
            method2();
            super::method1();
            // or
            crate::front_of_house::method1();
        }
    }
}

案例4 use 关键字

src/lib.rs

pub mod front_of_house {

    fn method1() {}

    pub mod hosting {
        fn method2() {}

        pub fn method3() {
            method2();
            super::method1();
            // or
            crate::front_of_house::method1();
        }
    }
}

use crate::front_of_house::hosting;

pub fn eat_at3(){
    hosting::method3();
}

src/main.rs

use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    map.insert(1, 2);
}

案例5 as 关键字

src/main.rs

use std::collections::HashMap as MyMap;

fn main() {
    let mut map = MyMap::new();
    map.insert(1, 2);
}

案例6 pub use

重新导出

案例7 将模块重新拆分为不同文件

理论:
在这里插入图片描述

  1. 一级拆分 (等同案例4的效果)

在这里插入图片描述

src/lib.rs

pub mod front_of_house;

use crate::front_of_house::hosting;

pub fn eat_at3(){
    hosting::method3();
}

src/front_of_house.rs

fn method1() {}

pub mod hosting {
    fn method2() {}

    pub fn method3() {
        method2();
        super::method1();
        // or
        crate::front_of_house::method1();
    }
}
  1. 二级拆分 (等同案例2的效果)

在这里插入图片描述

src/lib.rs

pub mod front_of_house;

pub fn eat_at(){
    crate::front_of_house::hosting::add_to_waitlist();
}

src/front_of_house.rs

pub mod hosting;

pub mod serving;

src/front_of_house/hosting.rs

pub fn add_to_waitlist() {}
pub fn seat_at_table() {}

src/front_of_house/serving.rs

pub fn take_order() {}
pub fn serve_order() {}
pub fn take_payment() {}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1533420.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯-礼物-二分查找

题目 思路 --刚开始想到暴力尝试的方法,但是N太大了,第一个测试点都超时。题目中说前k个石头的和还有后k个石头的和要小于s,在这里要能想到开一个数组来求前n个石头的总重,然后求前k个的直接将sum[i]-sum[i-k-1]就行了&#xff0…

Vue+SpringBoot打造快乐贩卖馆管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 搞笑视频模块2.3 视频收藏模块2.4 视频评分模块2.5 视频交易模块2.6 视频好友模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 搞笑视频表3.2.2 视频收藏表3.2.3 视频评分表3.2.4 视频交易表 四、系…

蓝桥杯-python-递归

递归&#xff1a;通过自我调用解决问题的函数 注意&#xff1a; #1.递归出口 #2.当前问题如何变成子问题 例子&#xff1a;利用递归写一个阶乘函数&#xff0c;F(n),求n的阶乘 def f(n):if n < 1:return 1ans n * f(n-1)return ans print(f(5)) 例子&#xff1a;汉诺塔…

大数据Doris(六十九):项目线上表现

文章目录 项目线上表现 一、查询响应时间

【Linux第三课-基础开发工具的使用】yum、vim、gcc/g++编译器、gdb、Make/Makefile编写、进度条程序、git命令行简单操作

目录 yum - 软件包管理器快速认识yum快速使用yumyum搜索yum安装yum卸载 yum的周边 - yum的整个生态问题 vim快速介绍vimvim的模式命令模式插入模式低行模式 常见模式 -- 命令、低行命令模式 -- 光标的移动命令模式 -- 复制粘贴、剪贴、删除命令模式 -- 小写/大写替换模式命令模…

个人开发App成功上架手机应用市场的关键步骤

目录 1. 苹果审核和APP备案 2. APP上架操作步骤 3. 审核和发布 4. 上线工作 总结 参考资料 在当前移动应用市场竞争激烈的背景下&#xff0c;个人开发App如何成功上架成为开发者们必须面对的重要任务。本文将重点介绍自建App上架至手机应用市场的流程&#xff0c;包括苹果…

Linux离线安装Docker-Oracle_11g

拉取oracle11g镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g创建11g容器 docker run -d -p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g查看容器是否创建成功 docker ps -a导出oracle容器&#xff0c;查看…

HarmonyOS卡片刷新服务,信息实时更新一目了然

如今衣食住行娱乐影音等App占据了大多数人的手机&#xff0c;一部手机可以满足日常大多需求&#xff0c;但对需要经常查看或进行简单操作的场景来说&#xff0c;总需要用户点开App操作未免过于繁琐。 针对该问题&#xff0c; HarmonyOS SDK为用户提供了Form Kit&#xff08;卡…

java算法第29天 | * 491.递增子序列 * 46.全排列 * 47.全排列 II

491.递增子序列 本题和大家刚做过的 90.子集II 非常像&#xff0c;但又很不一样&#xff0c;很容易掉坑里。 90.子集是可以对数组进行重新排序&#xff0c;再去重。但是这道题是要求子序列&#xff0c;如果对数组重排序会打乱顺序&#xff0c;无法获取子序列。 因此491.递增子…

AI如何支持慈善组织

为各种有意义的事业提供支持&#xff0c;无论是努力寻找治愈疾病的方法、研发使生活更轻松的技术&#xff0c;还是为有需要的人提供服务&#xff0c;都是无比崇高的使命。提供捐款或是投入时间支持的捐助者和志愿者往往对他们选择支持的事业的目标、服务和资源分配存有诸多疑虑…

C语言入门——数据类型,变量和常量

数据类型 基本数据类型&#xff08;不能再分&#xff09; 整数 整型 -- int -- 4字节&#xff08;一个字节占8位&#xff09; 短整型 -- short int -- 2字节 长整型 -- long int -- 8字节 short num01 3; long num02 4; long long num03 5; //int关键字可以省略实际上等价…

(基础)AJAX概念和axios使用、URL、请求方法和数据提交、HTTP协议、接口、form-serialize插件

AJAX概念和axios使用 AJAX概念 AJAX就是使用XMLHttpRequest对象与服务器通信&#xff0c;它可以使用JSON、XML、HTML和text文本等格式发送和接收数据&#xff0c;AJAX最吸引人的就是它的异步特性&#xff0c;也就是说它可以在不重新刷新页面的情况下与服务器通信&#xff0c;…

将MySQL数据库在idea中引入

输入SQL语句后运行即可

Redis技术学习|实战项目记录|短信登录(重点:拦截器)+ Redis代替session存储用户登录信息

学习资料声明 黑马程序员的Redis学习视频&#xff1a;黑马程序员Redis入门到实战教程 需要用到的知识&#xff1a;linux&#xff08;推荐韩顺平老师的教程&#xff0c;学到p30&#xff0c;创建好虚拟机和简单的几个命令就好。&#xff09;SSM。SpringBoot。 还用到了MybatisPl…

java每日一题——幸运囚犯(合集遍历,查询数据练习)

前言&#xff1a; 合集基本学完了&#xff0c;做做题巩固下知识点。打好基础&#xff0c;daydayup! 题目如下&#xff1a; 目前有100名囚犯&#xff0c;每个囚犯的编号是1-200之间的随机数。现在要求依次随机生成100名囚犯的编号&#xff08;要求这些囚犯的编号是不能重复的&a…

现货黄金做对冲的具体方法

现货黄金做对冲的具体方法是运用金融衍生工具和策略&#xff0c;以减轻或消除持有现货黄金所面临的市场风险。具体而言&#xff0c;投资者可通过期货合约、期权、掉期等金融工具来实现对冲&#xff0c;保障其投资价值不受金价波动的负面影响。 &#xfeff; 期货合约在对冲中…

前端应用开发实验:Vue的特性

目录 实验目的实验内容图片浏览功能代码实现效果 简单购物车功能代码实现效果 汇率换算功能代码实现效果 关于需要准备的内容&#xff0c;如Vue的下载就不多赘述了 实验目的 &#xff08;1&#xff09;掌握vue实例编写的语法和基本选项的使用 &#xff08;2&#xff09;在实际…

【漏洞复现】5. Fastjson 1.2.24反序列化漏洞(CVE-2017-18349)复现

文章目录 1. 预备知识2. 漏洞复现2.1 漏洞介绍2.2 漏洞原理分析2.2.1 Fastjson序列化/反序列化原理2.2.2 Fastjson反序列化漏洞原理 2.3 实验环境2.3.1 靶场搭建 2.3.2 攻击机配置2.3.3 Java反序列化工具marshalsec&#xff1a;2.4 漏洞复现2.4.1 漏洞探测 2.5 漏洞修复 1. 预备…

Linux:离线安装 jdk-8(配置Java环境)

Linux&#xff1a;离线安装 jdk-8&#xff08;配置Java环境&#xff09; 1、jdk简介2、检查已安装的Java版本&#xff0c;并卸载3、准备安装包4、解压安装包、进行安装5、设置环境变量(全局/个人) &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f…

数据库系统概论-第12章 数据库管理系统

12.1 数据管理系统的基本功能 12.2 数据库管理系统的系统结构 12.3 语言处理层 12.4 数据存取层 12.5 缓冲区管理 12.6 数据库的物理组织 12.7 小结