【Rust自学】7.4. use关键字 Pt.2 :重导入与换国内镜像源教程
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)
7.4.1. 使用pub use重新导入名称
使用use
将路径导入作用域内后。该名称在词作用域内是私有的。
以上一篇文章的代码为例:
mod front_of_house { pub mod hosting { pub fn add_to_waitlist() { } fn seat_at_table() { } }
} use crate::front_of_house::hosting::add_to_waitlist; pub fn eat_at_restaurant() { add_to_waitlist();
}
对于外部代码来说,eat_at_restaurant
是可以访问到的,因为它在声明时使用了pub
关键字,但eat_at_restuarant
下的add_to_wait list
外部代码是看不见的,因为use
引入默认是私有的。如果想要外部代码也能访问到,就需要在use
前增加pub
关键字:
mod front_of_house { pub mod hosting { pub fn add_to_waitlist() { } fn seat_at_table() { } }
} pub use crate::front_of_house::hosting::add_to_waitlist; pub fn eat_at_restaurant() { add_to_waitlist();
}
这样子就可以让外部代码访问到use
模块了。
当我们想要对外暴露代码的时候,我们可以使用这种技术,不按照内部代码的结构,而是做一些调整来对外进行暴露。这样代码内部的结构和外边看到的可能就会有点不一样。毕竟写代码的人和调用代码的人他们所期望的东西通常是不一样的。
最后总结一下:pub use
重导出既可以将该条目引入作用域,也可以使该条目被外部代码引入到它们的作用域。
7.4.2. 使用外部的包(package)
首先要在Cargo.toml
里添加依赖项的包(package)名与版本,而Cargo会从crates.io
这个网站上下载这个包和这个包的依赖项到本地(也可以用野生的crate,去GitHub找,但非常不建议这么做)。然后就是在代码里使用use
将特定条目引入到作用域。
还记得第二章的猜数游戏吗?那时候我们需要rand
包来生成随机数,现在我们还是以引入rand
包来举例:
Step 1:修改Cargo.toml
打开项目的Cargo.toml
文件,在[dependencies]
下写上rand
这个包名和指定的版本,中间用=
连接,如下:
[package]
name = "RustStudy"
version = "0.1.0"
edition = "2021" [dependencies]
rand = "0.8.5"
Step 2:在源代码中引入包
你想用包下的什么东西就用use
指定对应的路径来引入即可。这里我需要生成随机数的函数,所以就引入这个函数的父级模块Rng
,引入这行的代码如下:
use rand::Rng;
Rust语言的标准库std
也被当作是外部的包,但是它已经内置在Rust语言内了,所以就不需要在Cargo.toml
里增加依赖项了,直接在源代码中用use
引入就行,这有点类似于Python中的re
、os
、ctype
这类库。
比如说我们想要引入std
下的collectiond
模块的HashMap
这个结构体,就应该写:
use std::collections::HashMap;
但不用修改Cargo.toml
。
7.4.3. 使用嵌套路径清理大量的use语句
有的时候使用同一个包或模块下的多个条目,前面部分都是一样的,但是还是得写几遍,占用几行,如果引入的东西比较多,需要写很多遍,根本不现实,所以Rust允许使用嵌套路径在同一行内来简化引入的代码。类似于bash
的花括号展开特性。
其格式如下:
use 同样的部分::{不同的部分1, 不同的部分2, ...}
看个例子:
use std::cmp::Odering;
use std::io;
它们有公共的部分std
,所以就可以用嵌套路径写为:
use std::{cmp::Odering, io};
如果其中一个引用是另外一个引用的子路径,Rust还允许在使用嵌套路径时使用self
关键字,如下例:
use std::io;
use std::io::Write;
这部分就可以简写为:
use std::io::{self, Write};
7.4.4. 通配符*
使用*
可以把路径中所以的公共条目都引入到作用域。比如我想把std
库下collections
模块所有的公共条目都引入进去,就可以这么写:
use std::collections::*;
但是这种引入要非常谨慎的使用,通常不这样用。
它的应用场景是:
- 在测试的时候把所有被测试的代码引入到
test
模块 - 有时候被用于预导入(prelude)模块
7.4.5. 给Rust依赖项下载换源
由于crates.io
的网站在国外,所以国内下载很慢,可以换成清华大学镜像。
打开Windows Terminal(Win11自带,Win10需要去微软商店里下载,不花钱),先找到你的项目所在的文件夹路径,然后输入指令,回车:
cd 你的文件夹路径
然后在下面建立一个config
配置文件,输入如下指令,回车:
touch config
编辑它:输入如下指令,回车:
vim config
把这段贴进去:
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'tuna'
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
[net]
git-fetch-with-cli = true
把光标(不是鼠标指针!)下移,从
移到
然后输入
:wq
再按回车就会保存。
然后再重新build
你的项目就可以。
相关文章:
【Rust自学】7.4. use关键字 Pt.2 :重导入与换国内镜像源教程
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 7.4.1. 使用pub use重新导入名称 使用use将路径导入作用域内后。该名称在词作用域内是私有的。 以上一篇文章的代码为例: m…...
自动生成关于软件程序开发的100个文件并可提供下载入口
创建一个包含100个关于软件程序开发的文件并提供下载入口是一个庞大的任务,因为这需要编写大量的代码、文档和示例。不过,我可以提供一个大致的框架和指导,帮助你生成这些文件,并说明如何设置下载入口。 文件生成思路 编程语言文…...
Linux下基本指令
一、什么是指令 指令本质是可执行程序,在执行指令前,先在系统中查找对应的指令。在Linux系统中指令存在于/usr/bin/路径下 二、ls 指令 1、语法 ls [选项][目录或文件] 2、功能 对于目录,该命令列出该目录下的所有子目录与文件。 对于文…...
2024-12-25-sklearn学习(20)无监督学习-双聚类 料峭春风吹酒醒,微冷,山头斜照却相迎。
文章目录 sklearn学习(20) 无监督学习-双聚类1 Spectral Co-Clustering1.1 数学公式 2 Spectral Biclustering2.1 数学表示 3 Biclustering 评价 sklearn学习(20) 无监督学习-双聚类 文章参考网站: https://sklearn.apachecn.org/ 和 https://scikit-learn.org/sta…...
编程考古-传奇的开始Delphi(下)含所有版本.iso
概览 Delphi 的最新版本,即 Delphi 12,勾勒出了自公司创立以来的一条进化之路。该平台不断通过提升开发者生产力、扩展其支持的平台范围以及引入前沿技术来实现自我完善。作为 Embarcadero 提供的主要快速应用开发(RAD)环境&…...
集合stream
1.Collection集合 1.1数组和集合的区别【理解】 相同点 都是容器,可以存储多个数据 不同点 数组的长度是不可变的,集合的长度是可变的 数组可以存基本数据类型和引用数据类型 集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类 1.2集合类体系结构【理解】…...
Xshell 和 Xftp 更新提示问题的解决方法及分析
Xshell 和 Xftp 更新提示问题的解决方法及分析 在个人使用 Xshell 和 Xftp 的过程中,通过官网注册使用一段时间后,往往会遇到这样的问题:软件提示“要继续使用此程序,你必须应用最新的更新或使用新版本”。对于那些觉得更新比较麻…...
Docker安装MongoDB
Docker安装MongoDB 1、拉取镜像2、创建容器3、启动容器4、进入容器内部5、进入admin数据库6、添加管理员,其拥有管理用户和角色的权限7、进行认证8、通过admin添加普通用户 1、拉取镜像 docker pull mongo:4.0.32、创建容器 docker create --name mongodb-server …...
解锁自动化新高度,zTasker v2.0全方位提升效率
zTasker 是一款集强大功能与高效操作于一体的自动化任务管理软件,以其简单直观的设计和一键完成操作的特性深受用户喜爱。软件体积小巧,运行速度极快,支持超过 100 种不同的任务类型,并提供 30 多种定时或条件触发方式,…...
Windows Server 安装 MySQL 8.0 详细指南
文章目录 Windows Server 安装 MySQL 8.0 详细指南准备工作安装步骤1. 解压安装包2. 初始化数据目录3. 安装 MySQL 服务4. 启动 MySQL 服务 MySQL 配置文件 (my.ini)5. 设置 root 密码6. 配置远程访问 安全建议常见问题排查性能优化提示结语 👉洛秋资源小站 Windows…...
uniapp小程序使用webview 嵌套 vue 项目
uniapp小程序使用webview 嵌套 vue 项目 小程序中发送 <web-view :src"urlSrc" message"handleMessage"></web-view>export default {data() {return {urlSrc: "",};},onLoad(options) {// 我需要的参数比较多 所以比较臃肿// 获取…...
高效搭建Nacos:实现微服务的服务注册与配置中心
一、关于Nacos 1.1 简介 Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。Nacos 提供了简单易用…...
JavaScript 实现动态产品展示网页
JavaScript 实现动态产品展示网页 1. HTML 页面结构2. CSS 样式设计3. JavaScript 实现功能功能总结 本文设计了一个基于 JavaScript 的动态产品展示网页案例,核心功能包括: 动态产品分类过滤:通过点击分类按钮,仅显示属于该分类…...
小程序配置文件 —— 13 全局配置 - window配置
全局配置 - window配置 这里讲解根目录 app.json 中的 window 字段,window 字段用于设置小程序的状态栏、导航条、标题、窗口背景色; 状态栏:顶部位置,有网络信号、时间信息、电池信息等;导航条:有一个当…...
【小程序】wxss与rpx单位以及全局样式和局部样式
目录 WXSS 1. 什么是 WXSS 2. WXSS 和 CSS 的关系 rpx 1. 什么是 rpx 尺寸单位 2. rpx 的实现原理 3. rpx 与 px 之间的单位换算* 样式导入 1. 什么是样式导入 2. import 的语法格式 全局样式和局部样式 1. 全局样式 2. 局部样式 WXSS 1. 什么是 WXSS WXSS (We…...
矩阵的因子分解1-奇异值分解
文章目录 矩阵的因子分解1-奇异值分解求法归纳例1. 对矩阵 A ( 0 1 − 1 0 0 2 1 0 ) A \begin{pmatrix} 0 & 1 \\ -1 & 0 \\ 0 & 2 \\ 1 & 0 \end{pmatrix} A 0−1011020 进行奇异值分解1. 计算 A H A A^H A AHA 的特征值和特征向量2. 将奇异值按…...
Hive其十,优化和数据倾斜
目录 Hive优化 1、开启本地模式 2、explain分析SQL语句 3、修改Fetch操作 4、开启hive的严格模式【提高了安全性】 5、JVM重用 6、分区、分桶以及压缩 7、合理设置map和reduce的数量 合理设置map数量: 设置合理的reducer的个数 8、设置并行执行 9、CBO优…...
云原生后端开发(一)
云原生后端开发 云原生(Cloud-Native)是指一种构建和运行应用程序的方式,它充分利用了云计算的特点,比如弹性伸缩、自动化部署、容器化等。在云原生的架构下,后端应用通常具备高度可扩展、可维护、易于自动化管理的特…...
Python常用模块详解:从操作系统接口到日志记录
Python常用模块详解:从操作系统接口到日志记录 1. os模块:操作系统接口主要功能示例 2. io模块:流操作主要功能示例 3. time模块:时间操作主要功能示例 4. argparse模块:命令行参数解析主要功能示例 5. logging模块&am…...
修改成清华镜像源解决Anaconda报The channel is not accessible源通道不可用问题
修改成清华镜像源解决Anaconda报The channel is not accessible源通道不可用问题 最近在通过pycharm开发python程序,引用anaconda环境建立虚拟环境时报错,报UnavailableInvalidChannel: The channel is not accessible or is invalid.应该是镜像源访问通…...
Python之Web开发
一、基本概念 Web开发是指创建和维护网站或Web应用的过程。一个典型的Web应用包括前端(客户端)和后端(服务器端)。前端负责用户界面的设计和交互,而后端则处理业务逻辑、数据存储和与数据库的通信。Python作为一门功能…...
CDN如何抵御DDoS攻击
一、DDoS攻击的定义 DDoS(Distributed Denial of Service,分布式拒绝服务)攻击是一种常见且破坏性较大的网络攻击方式。攻击者通过控制大量分布在全球各地的受感染设备(称为“僵尸网络”),同时向目标服务器…...
基于进程信号量的多线程同步机制研究与实现
1 信号量 1.1 原理与概念 信号量机制本质是对于资源的预订操作,线程或者进程预订了之后,确保未来有一段时间,资源是属于我的。 对于预订资源,会有一个最小单位,资源都是以这个最小单位为整体被使用的。 信号量需要做…...
七、队列————相关概念详解
队列————相关概念详解 前言一、队列1.1 队列是什么?1.2 队列的类比 二、队列的常用操作三、队列的实现3.1 基于数组实现队列3.1.1 基于环形数组实现的队列3.1.2 基于动态数组实现的队列 3.2 基于链表实现队列 四、队列的典型应用总结 前言 本篇文章,我们一起来…...
钉钉h5微应用鉴权配置客户端 API 鉴权步骤
这里记录一下使用的钉钉h5微应用 配置客户端 API 鉴权的内容 注意不是所有的都功能都需要鉴权。 先要引入钉钉环境 见下链接 https://blog.csdn.net/KLS_CSDN/article/details/144794982?spm1001.2014.3001.5501 引入鉴权代码到前端页面并配置以下参数: dd.con…...
04.HTTPS的实现原理-HTTPS的混合加密流程
04.HTTPS的实现原理-HTTPS的混合加密流程 简介1. 非对称加密与对称加密2. 非对称加密的工作流程3. 对称加密的工作流程4. HTTPS的加密流程总结 简介 主要讲述了HTTPS的加密流程,包括非对称加密和对称加密两个阶段。首先,客户端向服务器发送请求…...
Python中构建终端应用界面利器——Blessed模块
在现代开发中,命令行应用已经不再仅仅是一个简单的文本输入输出工具。随着需求的复杂化和用户体验的重视,终端界面也逐渐成为一个不可忽视的设计环节。 如果你曾经尝试过开发终端UI,可能对传统的 print() 或者 input() 函数感到不满足&#…...
【Python】 基于Python实现日志聚合与分析工具:利用Logstash与Fluentd构建高效分布式日志系统
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在分布式系统中,日志数据的生成速度和数量呈指数级增长,传统的日志管理方式已无法满足现代企业对实时性、可扩展性和高效性的需求。本文深…...
汽车网络安全基线安全研究报告
一、引言 随着汽车行业朝着智能网联方向飞速发展,汽车网络安全已成为保障用户安全和行业健康发展的关键要素。本报告将深入探讨汽车网络安全相关内容,以及国际、国内重要的汽车网络安全标准基线和相应防护措施等内容。 二、汽车网络安全的重要性 &…...
[pdf、epub]260道《软件方法》强化自测题业务建模需求分析共216页(202412更新)
DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 260道《软件方法》强化自测题业务建模需求分析共216页(202412更新) 已上传到本CSDN账号的资源 如果下载不到,也可以访问以下链接: ht…...
工业4.0和MES(制造执行系统)方案(附实践资料)
工业4.0和MES(制造执行系统)方案是智能制造领域中的关键组成部分,它们共同推动着制造业的数字化转型。以下是工业4.0和MES方案的一些核心要点: 智能制造背景: 工业4.0是第四次工业革命,它结合了信息通信技术…...
机器视觉中的单线程、多线程与跨线程:原理与应用解析
在机器视觉应用中,程序的运行效率直接影响到系统的实时性和稳定性。随着任务复杂度的提高,单线程处理往往无法满足高性能需求,多线程技术因此被广泛应用。此外,跨线程操作(如在多线程中更新界面或共享资源)…...
性能测试瓶颈:CPU 问题的深度分析和调优
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 我们做性能测试的时候,除了使用工具编写脚本并执行之外,最核心的工作就是做性能测试结果分析和问题调优。然后在做性能测试的时候…...
云手机与Temu矩阵:跨境电商运营新引擎
云手机与 Temu 矩阵结合的基础 云手机技术原理 云手机基于先进的 ARM 虚拟化技术,在服务器端运行 APP。通过在服务器上利用容器虚拟化软件技术,能够虚拟出多个独立的手机操作系统实例,每个实例等同于一部单独的手机,可独立运行各…...
Oracle考试多少分算通过?
OCP和OCM认证的考试及格分数并不是固定的,而是根据考试的难度和考生的整体表现来确定。对于OCP认证,考生需要全面掌握考试要求的知识和技能,并在考试中表现出色才有可能通过。而对于OCM认证,考生则需要在每个模块中都达到一定的水…...
【UE5.3.2】安装metahuman插件
Unable to find plugin ‘MetaHuman’报错 Unable to find plugin MetaHuman (referenced via RPect_5_3.uproject). Install it and try again, or remove it from the required plugin list. 10>Microsoft.MakeFile.Targets(44,5): Error MSB3073 :...
python lambda函数用法
在Python中,lambda函数是一种用于创建匿名函数的简便方式。它允许你快速定义一个简单的函数,而不需要使用传统的def语句。lambda函数通常用于一次性的操作或作为参数传递给其他函数。 lambda函数的语法: lambda 参数1, 参数2, ... : 表达式l…...
acitvemq AMQP:因为消息映射策略配置导致的MQTT接收JMS消息乱码问题 x-opt-jms-dest x-opt-jms-msg-type
使用ActiveMQ(5.14.5)作消息系统服务的场景下, 当我用Apache Qpid Proton发送消息(使用AMQP协议)发送JMS消息,用Paho MQTT接收消息的时候, 收到的消息前面总是有一串乱码,大概就是这样: 4Sp?AS…...
ida的使用
一.ida的基本设置 在IDA的安装根目录下有许多文件夹,各个文件夹存储不同的内容 1.目录结构 cfg:包含各种配置文件,基本IDA配置文件ida.cfg,GUI配置文件idagui.cfg,文本模式用户界面配置文件idatui.cfg, idc:包含…...
archery docker安装
#下载Archery-1.11.3.tar.gz https://codeload.github.com/hhyo/Archery/tar.gz/refs/tags/v1.11.3 cd /root tar -zxvf Archery-1.11.3.tar.gz cd /root/Archery-1.11.3/src/docker-compose #启动 docker compose -f docker-compose.yml up -d#表结构初始化 docker exec -ti a…...
【zookeeper核心源码解析】第四课:客户端与服务端读写的io核心流程
系列文章目录 【zookeeper核心源码解析】第一课:zk启动类核心流程序列图 【zookeeper核心源码解析】第二课:俯瞰QuorumPeer启动核心流程,实现选举关键流程 【zookeeper核心源码解析】第三课:leader与follower何时开始同步&#…...
影刀进阶指令 | Kimi (对标ChatGPT)
文章目录 影刀进阶指令 | Kimi (对标ChatGPT)一. 需求二. 流程三. 实现3.1 流程概览3.2 流程步骤讲解1\. 确定问题2\. 填写问题并发送3\. 检测答案是否出完 四. 运维 影刀进阶指令 | Kimi (对标ChatGPT) 简单讲讲RPA调用kimi实现…...
Linux第99步_Linux之点亮LCD
主要学习如何在Linux开发板点亮屏,以及modetest命令的实现。 很多人踩坑,我也是一样。关键是踩坑后还是实现不了,这样的人确实很多,从群里可以知道。也许其他人没有遇到这个问题,我想是他运气好。 1、修改设备树 1)、…...
【C++决策和状态管理】从状态模式,有限状态机,行为树到决策树(三):基于BT行为树实现复杂敌人BOSS-AI
前言 (题外话)nav2系列教材,yolov11部署,系统迁移教程我会放到年后一起更新,最近年末手头事情多,还请大家多多谅解。回顾我们整个学习历程,我们已经学习了很多C的代码特性,也学习了很多ROS2的跨…...
SpringCloudAlibaba技术栈-Higress
1、什么是Higress? 云原生网关,干啥的?用通俗易懂的话来说,微服务架构下Higress 就像是一个智能的“交通警察”,它站在你的网络世界里,负责指挥和调度所有进出的“车辆”(也就是数据流量)。它的…...
《信息传播:人工智能助力驱散虚假信息阴霾》
在信息爆炸的时代,虚假信息和谣言如同脱缰野马,肆意传播,对社会秩序和公众生活造成了严重影响。人工智能作为一种强大的技术工具,正逐渐成为信息传播的有力助手,为防止虚假信息和谣言扩散提供了新的途径。 虚假信息和…...
玩客云v1.0 刷机时无法识别USB
v1.0刷机时公对公插头掉了,刷机失败,再次刷机,一直提示无法识别的USB设备,此时LED一直不亮,就像是刷成砖了一样,查了好多文章最后发现正面还有一个地方需要短接。 背面的短接点 【免费】玩客云刷机包s805-…...
STM32F103RCT6学习之五:ADC
1.ADC基础 ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁12位逐次逼近型ADC,1us转换时间 输入电压范围:0~3.3Vÿ…...
通过Cephadm工具搭建Ceph分布式存储以及通过文件系统形式进行挂载的步骤
1、什么是Ceph Ceph是一种开源、分布式存储系统,旨在提供卓越的性能、可靠性和可伸缩性。它是为了解决大规模数据存储问题而设计的,使得用户可以在无需特定硬件支持的前提下,通过普通的硬件设备来部署和管理存储解决方案。Ceph的灵活性和设计…...
flink+kafka实现流数据处理学习
在应用系统的建设过程中,通常都会遇到需要实时处理数据的场景,处理实时数据的框架有很多,本文将以一个示例来介绍flinkkafka在流数据处理中的应用。 1、概念介绍 flink:是一个分布式、高可用、高可靠的大数据处理引擎,…...