我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Rust模块怎么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Rust模块怎么用

这篇文章将为大家详细讲解有关Rust模块怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    前言

    本文适用于刚开始学习rust的同学,用于帮助理解rust模块间是如何相互引用的。本文尽量用极少的代码来演示,即便之前没有了解过rust也可以混个眼熟。用的时候可以有个印象。

    如果你之前没有了解过rust,只需要知道:Cargo-依赖管理工具,类似于npm,Cargo 使用文件放置约定,即文件名就是模块名。crate-集装箱,是一组功能的封装,类似于npm包。

    本文探讨的场景是在项目中对代码进行不同程度的文件拆分和模块抽离时,往往需要在一个文件中引入另一个模块的部分代码,在javascript中,我们可以通过导入导出来使用其他模块的代码,这个过程我们只需要关心导入路径是否正确。

    export const name= xx import lodash from './lodash'

    而在rust中,模块不再通过文件路径的方式引入,而是通过cargo以及约定的模块声明方式来构建模块树,然后通过use关键字来使用。但是rust的文档在文件拆分和模块使用上做的示例不太详细,于是就参考一些发布的crate的组织方式进行了梳理。

    模块声明&使用

    假如我们想实现一个加法模块,并提供给其他地方使用。我们可以有如下三种组织方式

    Cargo 使用文件放置约定,因此模块查找以class="lazy" data-src目录下的rs文件或者目录为准,并且只会查找一级,嵌套文件夹下的rs文件不可以直接被其他文件使用。

    方法一:直接在根文件下声明 add.rs

    我们可以通过在class="lazy" data-src下添加模块名同名的文件,cargo就可以识别到add模块。

    ├── Cargo.lock├── Cargo.toml├── class="lazy" data-src│   ├── add.rs│   ├── lib.rs

    方法二:声明add文件夹,文件夹下包含 mod.rs

    如果模块是文件夹,则必须有mod.rs文件。这类似于javascript的index.js。cargo仍然可以识别到这是add模块

    ├── Cargo.lock├── Cargo.toml├── class="lazy" data-src│   ├── add│   │   ├── mod.rs│   ├── lib.rs

    假设我们的代码内容如下,并位于文件add.rs 或者add/mod.rs内

    pub fn add_fn(a: i32, b: i32) -> i32 {    a + b}

    那么在lib.rs中我们可以通过如下方式调用我们的add模块

    // 声明模块并引用模块内的函数mod add;pub use crate::add::add_fn;pub fn test_lib() {  add_fn(1,2);}

    方法三:add.rs和add文件夹同时存在

    这种方式的目录结构看起来像下面这样

    ├── Cargo.lock├── Cargo.toml├── class="lazy" data-src│   ├── add│   │   └── add_m.rs│   ├── add.rs // index.js│   ├── lib.rs

    add.rs负责入口模块的导入导出,add文件夹下则存放其余相关联的其他模块。这类似于javascript的index.js统一导出了多个其他模块。和上面不同的是这里 导入使用到了mod关键字来拆分模块;

    文件内容看起来像下面这样

    add.rs

    pub mod add_m;// 类似于 export * from './validate; export * from './helper'

    add/add_m.rs

    pub fn add_fn(a: i32, b: i32) -> i32 {    a + b}

    lib.rs

    mod add;pub use crate::add::add_m::add_fn;pub fn test_lib() {  add_fn(1,2);}

    上述三种方式使用较多的应该是前两种,并且在大型项目内第二种更为合理,可以更好的组织文件。那么当一个模块文件夹下拆分多个模块文件时该怎调用相邻文件呢?

    同模块相邻文件引用

    我们调整目录结构如下

    ├── Cargo.lock├── Cargo.toml├── class="lazy" data-src│   ├── add│   │   ├── mod.rs│   │   ├── print.rs│   │   └── user.rs // user会调用print的方法│   ├── lib.rs

    在add模块下多了print和user。user会调用print的方法。

    print.rs

    pub mod my_print {    pub fn print_hello() {        println!( hello )    }}// 这里的pub mod 可以简单理解为ts的declare module ,里面是module的可用属性// declare module my_print {//  export function print_hello(): string;// }

    user.rs

    use super::print::my_print;pub fn hello_user() {    my_print::print_hello();}pub struct User {    pub name: String,}

    同模块下的文件互相引用使用super关键字。

    mod.rs

    // mod.rs为入口文件, 下面用mod声明会先去同文件夹下查找同名文件,如果没有则看是否有满足条件   的同名文件夹// 例如 add 文件夹下没有print.rs 则查找是否有print文件夹并且文件夹下有mod.rs。mod print;mod user;// 因为是同一个模块文件夹下,并且在入口文件使用,所以这里应selfpub use self::user::hello_user;pub use self::user::User;pub mod add_fn {    // use super::*; 如果有这行,则下面不用每次调用super    pub fn add(a: i32, b: i32) -> i32 {      // 注意这里super关键字,因为hello_user是在另一个模块声明的,模块间不能直接调用所以需要使用super来从模块根进行查找调用        super::hello_user();        let value = super::User {            name: String::from( Rust ),        };        println!( user name {} , value.name);        a + b    }}pub fn test_out_ref() {  // 这里不在需要super因为不在mod内定义    hello_user();}

    不同模块引用

    我们新增一个模块multip,返回两个数相乘的结果,目录结构如下

    ├── Cargo.lock├── Cargo.toml├── class="lazy" data-src│   ├── add│   │   ├── mod.rs│   │   ├── print.rs│   │   └── user.rs // user会调用print的方法│   ├── multip  // ------- 新增这个模块│   │   ├── mod.rs法│   ├── lib.rs

    multip/mod.rs

    pub fn res_multip(a: i32, b: i32) -> i32 {    a * b}

    假设add文件引入multip

    mod print;mod user;pub use self::user::hello_user;pub use self::user::User;// 新增下面这行use crate::multi::multip;

    如此便可以使用另一个模块的内容了。当然其他模块的相互引用方式一致。

    关于“Rust模块怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    Rust模块怎么用

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    Rust模块怎么用

    这篇文章将为大家详细讲解有关Rust模块怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言本文适用于刚开始学习rust的同学,用于帮助理解rust模块间是如何相互引用的。本文尽量用极少的代码来演示,
    2023-06-29

    Node.js中path模块,url模块,http模块怎么用

    小编给大家分享一下Node.js中path模块,url模块,http模块怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!path模块Node.js中,提供了一
    2023-06-29

    nodejs模块怎么用

    Node.js 是一套基于事件驱动、异步 I/O 的开源跨平台 JavaScript 运行时环境。在 Node.js 中,使用模块来组织代码,每个模块都是一个独立的文件,可以通过导入/导出进行模块间调用和逻辑复用。本文将介绍 Node.js 模块的基本用法。## 1.导入模块在 Node.js 中,使用 require() 函数导入模块。require() 函数的参数为需要导入
    2023-05-18

    python中的sys模块和os模块怎么用

    今天小编给大家分享一下python中的sys模块和os模块怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.sys模块
    2023-06-29

    Python中math模块和cmath模块怎么应用

    这篇文章主要介绍了Python中math模块和cmath模块怎么应用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中math模块和cmath模块怎么应用文章都会有所收获,下面我们一起来看看吧。cma
    2023-06-27

    Python中的time模块和calendar模块怎么用

    这篇文章将为大家详细讲解有关Python中的time模块和calendar模块怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在Python中对时间和日期的处理方式有很多,其中转换日期是最常见的一个功
    2023-06-25

    python中os模块和sys模块怎么使用

    今天小编给大家分享一下python中os模块和sys模块怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、os模块o
    2023-07-05

    python怎么调用rust

    要在Python中调用Rust代码,您需要使用一些工具和库来实现该功能。下面是一些常用的方法:使用ctypes库:ctypes是Python的一个标准库,它允许您调用C函数。由于Rust可以生成与C兼容的动态链接库(.dll或.so文件),
    2023-10-26

    Rust如何进行模块化开发技巧分享

    Rust模块化,模块化有助于代码的管理和层次逻辑的清晰,本文主要介绍了Rust如何进行模块化开发,结合实例代码给大家讲解的非常详细,需要的朋友可以参考下
    2023-01-15

    Python time模块怎么用

    本篇内容主要讲解“Python time模块怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python time模块怎么用”吧!在我们平常的代码中,经常需要和时间打交道。在Python中,
    2023-06-27

    Python怎么使用模块

    这篇文章给大家分享的是有关Python怎么使用模块的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.1 导入模块import 模块名form 模块名import 功能名form 模块名 import *impor
    2023-06-22

    python process模块怎么用

    今天小编给大家分享一下python process模块怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。process可以
    2023-06-27

    python beautifulsoup4模块怎么用

    本篇内容主要讲解“python beautifulsoup4模块怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python beautifulsoup4模块怎么用”吧!一、Beautifu
    2023-06-30

    ES6模块怎么使用

    本篇内容主要讲解“ES6模块怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ES6模块怎么使用”吧!ES6 引入了模块化,其设计思想是在编译时就能确定模块的依赖关系,以及输入和输出的变量。
    2023-06-03

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录