【Rust】快速教程——模块mod与跨文件

news2025/1/11 20:48:54

前言

道尊:没有办法,你的法力已经消失,我的法力所剩无几,除非咱们重新修行,在这个世界里取得更多法力之后,或许有办法下降。——《拔魔》


         \;\\\;\\\;

目录

    • 前言
    • 跨文件mod
    • 多文件mod

跨文件mod

//my_mod.rs
pub mod mod_1{
    //默认私有
    fn say1(){
        println!("[say1]private function");
    }
    pub fn say2(){
        println!("[say2]public function");

        //调用子模块的函数
        mod_2::dog();
    }
    pub fn say3(){
        println!("[say3]public function");
        say2();

        //调用子模块的函数
        mod_2::run();
    }

    //模块的嵌套
    pub mod mod_2{
        fn say1(){
            println!("[mod_2][say1]private function");//不知道会不会重写
        }
        pub fn say2(){
            println!("[mod_2][say2]public function");//不知道会不会重写
        } 

        //此函数只在当前mod中可见
        pub(self) fn interior_f(){
            println!("[mod_2][interior_f]only used in this mod");
        }
        //只在my_mod::mod_1中可见
        pub(in crate::my_mod::mod_1) fn dog(){
            println!("[mod_2][dog]do it!");
            interior_f();
        }
        //此函数只在上一层mod中可见
        pub(super) fn run(){
            println!("[mod_2][run]run!");
        }

        
        //再嵌套一层看看效果
        pub mod mod_3{
            pub fn say1(){
                println!("[mod_3][say1]marvelous!");
            }
            pub fn say2(){
                println!("[mod_3]say2");
                say1(); //本mod_3的say1
                //say2(); //本mod_3的say2,递归报错
                //interior_f(); //只在mod_2中,不能拿到下面来
                //dog(); //不能拿到下面来
                //run(); //只在mod_1中,不能拿到下面来
            }
        }
    }
}
//function.rs
mod my_mod;
pub use my_mod::*;

fn main() {
    //mod_1::say1();   //私有函数调用不了
    mod_1::say2();
    mod_1::say3();

    //mod_1::mod_2::say1();  //私有函数调用不了
    mod_1::mod_2::say2();
    //mod_1::mod_2::interior_f();  //私有函数调用不了
    //mod_1::mod_2::some(); //私有函数调用不了
    //mod_1::mod_2::run(); //私有函数调用不了

    mod_1::mod_2::mod_3::say1();
    mod_1::mod_2::mod_3::say2();
}

在这里插入图片描述

         \;\\\;\\\;

多文件mod

文件夹的名字就是mod的名字,里面必须有一个mod.rs,和python里的__init__.py一样。文件夹外需要一个mod.rs,来声明这个文件夹是模块。

在这里插入图片描述

//student.rs
pub fn run_2(){
    println!("i am a student");
}
//teacher.rs
pub fn run_3(){
    println!("i am a teacher");
}
//staff.rs
pub fn run_1(){
    println!("i am a staff");
}

interface文件夹中的mod

//mod.rs
pub mod staff;
pub mod student;
pub mod teacher;

和interface文件夹并行的mod

//mod.rs
pub mod interface;

      \;\\\;
调用模块

//run.rs
mod interface;
use interface::staff;
use interface::student;
use interface::teacher;

fn main(){
    staff::run_1();
    student::run_2();
    teacher::run_3();
}

在这里插入图片描述

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

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

相关文章

C#语言的由来与发展历程

C#语言的由来与发展历程可以追溯到2000年,当时微软公司为了在.NET平台上开发应用程序,发布了一种新的编程语言——C#。C#语言的设计目标是成为一种简单、现代、通用和面向对象的编程语言,为开发者提供更强大的生产力、更强大的面向对象支持和…

Line多账号如何运营?

Line在亚洲地区非常流行,特别是在日本、台湾、泰国等地,是当地最受欢迎的即时通讯应用之一。 除了基本的聊天功能外,Line还提供了各种各样的贴图、表情包和游戏等娱乐功能,吸引了大量的用户。 一、选择利用line进行海外营销的原…

2024年山东省职业院校技能大赛中职组“网络安全”赛项竞赛试题-A

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-A 一、竞赛时间 总计:360分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A、B模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略设置 A-3 流量完整性保护 A-4 …

百度智能云正式上线Python SDK版本并全面开源

文章目录 前言一、SDK的优势二、千帆SDK:快速落地LLM应用三、如何快速上手千帆SDK3.1、SDK快速启动3.2. SDK进阶指引 3.3. 通过Langchain接入千帆SDK4、开源社区 前言 百度智能云千帆大模型平台再次升级!在原有API基础上,百度智能云正式上线…

【漏洞复现】IP-guard WebServer 远程命令执行

漏洞描述 IP-guard是一款终端安全管理软件,旨在帮助企业保护终端设备安全、数据安全、管理网络使用和简化IT系统管理。互联网上披露IP-guard WebServer远程命令执行漏洞情报。攻击者可利用该漏洞执行任意命令,获取服务器控制权限。 免责声明 技术文章仅供参考,任何个人和…

Beego之Bee工具使用

1、bee工具使用 bee 工具是一个为了协助快速开发 Beego 项目而创建的项目,通过 bee 你可以很容易的进行 Beego 项目的创 建、热编译、开发、测试、和部署。Bee工具可以使用的命令: [rootzsx ~]# bee 2023/02/18 18:17:26.196 [D] init global config…

Nacos在Windows本地安装并启动教程

Nacos在Windows本地安装并启动教程 Nacos注册中心和Eureka是两种常见的服务注册与发现组件,它们在以下方面存在一些区别: 开源项目:Nacos是阿里巴巴开源的项目,而Eureka是Netflix开源的项目。 功能特性:Nacos在服务注册…

SQL 查询优化指南:SELECT、SELECT DISTINCT、WHERE 和 ORDER BY 详解

SELECT 关键字 SQL的SELECT语句用于从数据库中选择数据。SELECT语句的基本语法如下: SELECT column1, column2, ... FROM table_name;其中,column1, column2,等是您要从表中选择的字段名称,而table_name是您要选择数据的表的名称。 如果要…

某60区块链安全之51%攻击实战学习记录

区块链安全 文章目录 区块链安全51%攻击实战实验目的实验环境实验工具实验原理攻击过程 51%攻击实战 实验目的 1.理解并掌握区块链基本概念及区块链原理 2.理解区块链分又问题 3.理解掌握区块链51%算力攻击原理与利用 4.找到题目漏洞进行分析并形成利用 实验环境 1.Ubuntu1…

Linux输入设备应用编程(键盘,按键)

目录 一 输入设备编程介绍 1.1 什么是输入设备呢? 1.2 什么是输入设备的应用编程? 1.3 input子系统 1.4 数据读取流程 1.5 应用程序如何解析数据 1.5.1 按键类事件: 1.5.2 相对位移事件 1.5.3 绝对位移事件 二 读取 struct input_e…

审视现状,持续优化,数字化转型不简单

北京市首都公路发展集团有限公司(简称“首发集团”)为北京市国有独资公司,1999年9月成立,负责北京市高速公路、城市道路及配套设施的投融资、建设及运营管理。集团下属4家分公司、10家全资或控股二级子公司,参股中铁京…

C++——map和set

作者:几冬雪来 时间:2023年11月17日 内容:C板块map和set知识讲解 目录 前言: map与set与关联式容器: set底层: set的书写: insert: erase: lower_bound与upper_b…

一文带你了解docker技术

什么是Docker Docker是一种虚拟技术,诞生于2013年,是dotCloud公司研发的开源项目,因为docker这个公司后来改名docker inc,docker的目标是实现轻量级的操作系统虚拟化解决方案。通俗点说,我们想在一台机器上运行多个系…

opencv(3):控制鼠标,创建 tackbar控件

文章目录 控制鼠标相关APIsetMouseCallbackcallback TrackBar 控件cv2.createTrackbarcv2.getTrackbarPos: 控制鼠标相关API setMouseCallback(winname, callback, userdata)callback(event, x, y, flags, userdata) setMouseCallback 在 OpenCV 中,s…

搞定这套Python爬虫面试题,大厂Offer拿到手软

文章目录 1、简述Python 的特点和优点2、Python 有哪些数据类型?3、列表和元组的区别4、Python 是如何运行的5、Python 运行速度慢的原因6、面对 Python 慢的问题,有什么解决办法7、描述一下全局解释器锁 GIL8、深拷贝 浅拷贝9、is 和 的区别10、文件读…

ZYNQ_project:uart(odd,even)

概念: UART(Universal Asynchronous Receiver-Transmitter):即通用异步收发器,是一种通用串行数据总线,用于异步通信。一般UART接口常指串口。 UART在发送数据时将并行数据转换成串行数据来传输&#xff…

【数据结构(二)】稀疏 sparsearray 数组(1)

文章目录 1. 稀疏数组的应用场景1.1. 一个实际的需求1.2. 基本介绍 2. 稀疏数组转换的思路分析3. 稀疏数组的代码实现3.1. 二维数组转稀疏数组3.2. 稀疏数组转二维数组 4. 课后练习 1. 稀疏数组的应用场景 1.1. 一个实际的需求 问题:     编写的五子棋程序中&…

JavaEE初阶 01 计算机是如何工作的

前言 今天开始进行对JavaEE的一些基本总结,希望大家能在阅读中有所收获,如有错误还望多多指正. 1.冯诺依曼体系结构 这个体系结构相信学计算机的同学都不陌生,但是你真的知道这个体系结构说的是什么嘛?请听我娓娓道来.首先我先给出一张冯诺依曼体系结构的简图 你可以理解为当前…

资深品酒师荆芳老师倾情力作,带你品酒选酒,读懂葡萄酒的世界

在美酒琳琅满目的今天,如何才能挑选到适合自己的葡萄酒?如何品鉴葡萄酒的独特魅力?资深品酒师荆芳老师的最新力作《葡萄酒爱好者》正式上线,带你走进葡萄酒的世界,领略品酒选酒的奥秘。作为一位资深的品酒师和教育工作…

leetcode - 串联所有单词的子串 - 最小覆盖子串 - x 的平方根

I30. 串联所有单词的子串 - 力扣(LeetCode) 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如,如果 words ["ab&qu…