首页 > 其他分享 >rust模块管理示例1

rust模块管理示例1

时间:2024-04-29 12:44:43浏览次数:14  
标签:rs s2 s1 示例 instance 模块 hello rust mod

1、创建如下rust工程

不用管其中代码的作用是什么,只要知道有一个main.rs和四个模块s1、s2、s3、s4即可。

2、s1模块使用了Rust2015的模块格式,即:需要创建s1文件夹,在s1下创建功能文件hello.rs及名为mod.rs的模块定义文件。

s1/hello.rs

pub fn say_hello(){
    println!("hello from module s1");
}

s1/bye.rs

pub fn say_bye(){
    println!("good bye from module s1");
}

s1/mod.rs

//省略无关部分
。。。。。。

pub fn main1() {
    // 获取单例实例
    let instance1 = Singleton::get_instance();
    let instance2 = Singleton::get_instance();
    // 修改单例数据
    {
        let mut instance = instance1.lock().unwrap();
        instance.data = String::from("s1:Modified singleton instance");
    }
    // 输出单例数据
    {
        let instance = instance2.lock().unwrap();
        println!("{}", instance.data);
    }

    hello::say_hello();
}

mod hello;
mod bye;

注意mod语句可以出现在mod.rs文件的任何位置,可以加pub以示公开,可以声明多个mod,不使用mod语句声明的模块不参与编译。

3、s2模块使用了Rust2018的模块格式,即:s2文件夹下创建功能文件hello.rs等,同时创建一个与s2文件夹同级的文件s2.rs

s2/hello.rs

pub fn say_hello(){
    println!("hello from module s2");
}

s2.rs

mod hello;

pub fn main2() {
    hello::say_hello();
}

4、s3和s4使用了单文件模块,比较简单,不再赘述。

 s3.rs

//省略无关代码
。。。

pub fn main3() {
    // 获取单例实例
    let instance = INSTANCE.borrow();
    println!("{}", instance.data);
}

 

5、最后,在工程的main.rs或lib.rs等程序入口文件,需要声明s1、s2、s3、s4等顶级模块:

main.rs

mod s1;
mod s2;

fn main() {
    s1::main1();
    s2::main2();
    s3::main3();
    s4::main4();
}

mod s3;
mod s4;

注意mod语句的位置、顺序都是无关紧要的。

6、总结:

mod是建立大工程的管理基础,搞清楚其语法规则对于初学者很重要。另外,本文只讨论了将文件作为mod时的mod语句规则,没有讨论内嵌mod的语法,请自行查资料学习。本文也没有讨论use语句,对于rust而言,use更像是一个对模块路径重命名的“语法糖”,请参考其他资料。

本练习的源文件附后供参考:

本次练习的源程序

标签:rs,s2,s1,示例,instance,模块,hello,rust,mod
From: https://www.cnblogs.com/zjw0901/p/18165417

相关文章

  • 交易策略-网格策略(三):示例操作一
    作者:麦克煎蛋  出处:https://www.cnblogs.com/mazhiyong/转载请保留这段声明,谢谢!1、网格点为5%的交易示例以上示例是当指数在正常和低估值之间波动运用的网格交易策略。但市场不可能每次都是在低估和正常估值之间来回波动,大熊市的时候指数更多的是在低估区域反复震荡,这时候......
  • 揭秘Python中的JSON数据格式与Requests模块
    From: https://mp.weixin.qq.com/s/QgGyn2efYtVKI65RwXoiEA------------------------------------------------------------------------------------importpytestimportjsonimportrequestsfromrequests.authimportHTTPBasicAuthfromrequests.adaptersimportHTTPA......
  • BOSHIDA 如何选择适合自己需求的DC电源模块?
    BOSHIDA如何选择适合自己需求的DC电源模块?在选择适合自己需求的DC电源模块时,需要考虑一些关键因素,以确保选择的模块能够满足电源要求并具有良好的性能。下面是一些值得考虑的因素: 1.电压输出范围:首先,要确定所需的电源电压范围。不同的应用需要不同的电压输出,因此需要选择能......
  • C#的基于.net framework的Dll模块编程(四) - 编程手把手系列文章
          这次继续这个系列的介绍: 一、命名空间的起名;对于C#来说,一般命名空间的建议是:公司名(或个人名称).产品名.分类名,比如我这边是用的这个:Lzhdim.LPF.Helper,意思是个人名Lzhdim,加上LPF为平台名,加上Helper分类为帮助类,其它的更长的请读者自己添加。  ......
  • 模块的基础知识点
    一:模块的定义模块:就是一系列功能的集合体,分为三大类1.内置(就是解释器里自带的)2.自定义:可以是任何语言写的(py文件本身就是一个模块,文件名叫xx.py,模块名就叫xx)3.第三方:既不是自带的,也不是自己写的,是别人的直接拿过来ps:模块分为四种形式......
  • Python (GUI编程)模块 使用方法
    GraphicalUserInterface,简称GUI,中文名为图形用户界面,又称图形用户接口,是一种通过图形元素(如按钮、文本框、图像等)来与计算机程序进行交互的方式。与传统的命令行界面相比,GUI更加直观和易于使用,因为用户可以直接通过点击、拖拽等方式来完成任务,而无需记忆和输入复杂的命令。GUI......
  • 陈畅亮搞的专利在Windows上利用加解密DLL模块对数据库连接字符串进行加解密
    陈畅亮搞的专利在Windows上利用加解密DLL模块对数据库连接字符串进行加解密  这种专利权人是公司,个人是发明人,专利年费是申请人先垫付,然后公司报销了,这个专利本身就不属于员工的这个是公司是专利权人, 使用权是公司,如果想要维持权利的话,需要缴纳年费,专利发明现在一个市......
  • NodeJS命令行注入:示例及预防
    在本文中,我们将学习如何在NodeJS中使用命令行函数进行注入漏洞攻击。现代网站可以是一个复杂的软件,它由许多分布在不同环境中的部分组成。如果你的应用程序没有得到有效的保护,那么分布在这些环境中的每一个组成部分都有可能受到命令行注入漏洞的攻击。本文将介绍如......
  • AI模块(有限状态机、行为树)-应用在cocos中
    前言:本模块是在cocos项目中运用战斗框架,根据学习别人的文章来结合项目进行编写的,若有不对不合理的地方有劳大家指正,万分感谢!!!若有能有用的上的,万分荣幸!简介:AI模块一般是对怪物的AI实现,或者托管等自动战斗的情况。具体方式可能根据项目的具体需求来选择,常用的有:有限状态机,行为树......
  • BOSHIDA 提升电子设备性能的秘密:优质DC电源模块
    BOSHIDA提升电子设备性能的秘密:优质DC电源模块电子设备在现代社会中起着至关重要的作用,而其性能的提升对于用户体验和功能的改进至关重要。在电子设备中,优质的DC电源模块是实现性能提升的关键因素之一。本文将介绍优质DC电源模块的作用以及如何提升电子设备的性能。首先,什么是D......