rust学习-rust中的保留字
rust学习-rust中的保留字
- 已使用的保留字
- 未来可能使用的保留字
保留字是语言中预定义的标识符,不能用作变量名、函数名或其他自定义标识符,Rust的保留字大致可以分为两类:已使用的保留字和未来可能使用的保留字
已使用的保留字
- as:用于类型转换
let num: i32 = 5;
let float_num = num as f64;
- break:用于终止循环
loop {println!("再次循环");break;
}
- const:用于定义常量
const MAX_POINTS: u32 = 100_000;
- continue:用于跳过当前循环的剩余部分并开始下一次迭代
for i in 0..10 {if i % 2 == 0 {continue;}println!("奇数: {}", i);
}
- crate:用于指定 crate 根模块
// 在 Cargo.toml 中定义 crate
// Cargo.toml
[package]
name = "my_crate"
version = "0.1.0"
- dyn:用于动态分发的 trait 对象
trait Draw {fn draw(&self);
}struct Rectangle;impl Draw for Rectangle {fn draw(&self) {println!("绘制矩形");}
}fn draw_item(item: &dyn Draw) {item.draw();
}let rectangle = Rectangle;
draw_item(&rectangle);
- else:用于条件语句中的 if 之后的分支
let x = 5;
if x == 5 {println!("x 是 5");
} else {println!("x 不是 5");
}
- enum:用于定义枚举类型
enum Color {Red,Green,Blue,
}let color = Color::Red;
- extern:用于定义外部函数或链接外部库
extern "C" {fn printf(format: *const u8, ...) -> i32;
}fn main() {unsafe {printf(b"Hello, World!\0".as_ptr());}
}
- false:布尔常量,表示假
let is_false = false;
- fn:用于定义函数
fn add(a: i32, b: i32) -> i32 {a + b
}let sum = add(5, 3);
- for:用于循环
for i in 0..3 {println!("i: {}", i);
}
- if:用于条件语句
let x = 5;
if x > 0 {println!("x 是正数");
}
- impl:用于实现方法或 trait
struct Point {x: i32,y: i32,
}impl Point {fn new(x: i32, y: i32) -> Point {Point { x, y }}fn distance(&self, other: &Point) -> f64 {(((self.x - other.x).pow(2) + (self.y - other.y).pow(2)) as f64).sqrt()}
}let p1 = Point::new(0, 0);
let p2 = Point::new(3, 4);
println!("距离: {}", p1.distance(&p2));
- in:用于 for 循环或 match 语句
for i in 0..3 {println!("i: {}", i);
}match 2 {1 => println!("一是 1"),2 => println!("二是 2"),_ => println!("其他"),
}
- let:用于声明变量
let x = 5;
let y: i32 = 10;
- loop:用于无限循环
loop {println!("再次循环");break;
}
- match:用于模式匹配
let x = 2;
match x {1 => println!("一是 1"),2 => println!("二是 2"),_ => println!("其他"),
}
- mod:用于定义模块
mod my_module {pub fn say_hello() {println!("Hello from my_module!");}
}fn main() {my_module::say_hello();
}
- move:用于闭包捕获环境
let x = 5;
let y = 10;let closure = move || {println!("x: {}, y: {}", x, y);
};closure();
- mut:用于声明可变变量
let mut x = 5;
x = 10;
- pub:用于声明公共项
pub fn public_function() {println!("这是公共函数");
}mod my_mod {pub fn public_function() {println!("这是 my_mod 中的公共函数");}
}
- ref:用于在模式匹配中获取引用
let x = 5;
let ref_x = &x;match ref_x {ref r => println!("r 是引用: {:?}", r),
}
- return:用于从函数返回值
fn add(a: i32, b: i32) -> i32 {return a + b;
}let sum = add(5, 3);
- self:用于表示当前实例
struct Point {x: i32,y: i32,
}impl Point {fn new(x: i32, y: i32) -> Self {Point { x, y }}fn distance_from_origin(&self) -> f64 {(self.x.pow(2) + self.y.pow(2)) as f64}
}let p = Point::new(3, 4);
println!("距离原点: {}", p.distance_from_origin());
- Self:用于表示当前类型的自身
struct Point {x: i32,y: i32,
}impl Point {fn new(x: i32, y: i32) -> Self {Self { x, y }}
}let p = Point::new(3, 4);
- static:用于定义静态变量
static X: i32 = 5;fn main() {println!("X: {}", X);
}
- struct:用于定义结构体
struct Point {x: i32,y: i32,
}let p = Point { x: 3, y: 4 };
- super:用于访问父模块
mod outer {pub fn outer_fn() {println!("outer_fn");}mod inner {pub fn inner_fn() {super::outer_fn();println!("inner_fn");}}
}fn main() {outer::inner::inner_fn();
}
- trait:用于定义 trait
trait(特性)是一种定义共享行为的方式,它类似于其他编程语言中的接口(interface),但更加灵活和强大,trait可定义一组方法签名,这些方法可以在不同的类型中实现,通过这种方式,Rust能够实现多态性,并确保类型安全
trait Draw {fn draw(&self);
}struct Rectangle;impl Draw for Rectangle {fn draw(&self) {println!("绘制矩形");}
}fn draw_item(item: &impl Draw) {item.draw();
}let rectangle = Rectangle;
draw_item(&rectangle);
- true:布尔常量,表示真
let is_true = true;
- type:用于定义类型别名
type Kilometers = i32;let distance: Kilometers = 5;
- unsafe:用于编写不安全的代码
unsafe fn dangerous() {println!("这是不安全的代码");
}fn main() {unsafe {dangerous();}
}
- use:用于引入模块
mod my_mod {pub fn say_hello() {println!("Hello from my_mod!");}
}use my_mod::say_hello;fn main() {say_hello();
}
- where:用于指定 trait 约束
fn some_func<T: std::fmt::Display>(t: T) where T: std::fmt::Debug {println!("t: {:?}", t);
}fn main() {some_func(5);
}
未来可能使用的保留字
- abstract
- become
- box
- do
- final
- macro
- override
- priv
- typeof
- unsized
- virtual
- yield
这些保留字目前在 Rust 中没有具体的用途,但它们被预留以备将来扩展语言时使用
相关文章:
rust学习-rust中的保留字
rust学习-rust中的保留字 已使用的保留字未来可能使用的保留字 保留字是语言中预定义的标识符,不能用作变量名、函数名或其他自定义标识符,Rust的保留字大致可以分为两类:已使用的保留字和未来可能使用的保留字 已使用的保留字 as࿱…...
MySQL中的读锁与写锁:概念与作用深度剖析
MySQL中的读锁与写锁:概念与作用深度剖析 在MySQL数据库的并发控制机制中,读锁和写锁起着至关重要的作用。它们是确保数据在多用户环境下能够正确、安全地被访问和修改的关键工具。 一、读锁(共享锁)概念 读锁,也称为…...
专利申请的价值
独占市场 一种产品只要授权专利权,等于在市场上拥有独占权。 政策奖励 各地方政府均出台响应文件, 对专利申请者进行奖励或者补助。 申报项目 申报高新技术企业、创新基金等 各类计划、项目的必要前提条件 专利申请 技术保护 防止新的技术与产品被他人 抄…...
使用 OpenCV 和 Python 轻松实现人脸检测
目录 一、准备工作 二、加载人脸检测模型 三、读取图像并进行人脸检测 四、处理视频中的人脸检测 五、优化人脸检测效果 六、总结 在人工智能和计算机视觉领域,人脸检测是一项非常基础且重要的技术。通过人脸检测,我们可以在图像或视频中识别并定位人脸,进而进行后续的…...
自然语言处理——从原理、经典模型到应用
1. 概述 自然语言处理(Natural Language Processing,NLP)是一门借助计算机技术研究人类语言的科学,是人工智能领域的一个分支,旨在让计算机理解、生成和处理人类语言。其核心任务是将非结构化的自然语言转换为机器可以…...
kotlin内联函数——runCatching
1.runCatching作用 代替try{}catch{}异常处理,用于捕获异常。 2.runCatching函数介绍 参数:上下文引用对象为参数返回值:lamda表达式结果 调用runCatching函数,如果调用成功则返回其封装的结果,并可回调onSuccess函…...
2025年新开局!谁在引领汽车AI风潮?
汽车AI革命已来。 在2025年伊始开幕的CES展上,AI汽车、AI座舱无疑成为了今年汽车行业的最大热点。其中不少车企在2025年CES上展示了其新一代AI座舱,为下一代智能汽车的人机交互、场景创新率先打样。 其中,东软集团也携带AI驱动、大数据支撑…...
YOLO目标检测3
一. 参考资料 《YOLO目标检测》 by 杨建华博士 本篇文章的主要内容来自于这本书,只是作为学习记录进行分享。 二. 搭建YOLOv1的网络 2.1 YOLOv1的网络结构 作者带我们构建的YOLOv1网络是一个全卷积结构,其中不包含任何全连接层,这一点可以…...
css3 svg制作404页面动画效果HTML源码
源码介绍 css3 svg制作404页面动画效果HTML源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果 效果预览 源码如下 <!doctype html> <html> <head> <meta charse…...
LINUX 平台最快子网路由转发,内核使能选项配置
阅读本文之间,可线性参考以下文献。 Linux 命令行配置为单臂旁路由。_linux单臂路由-CSDN博客 Linux 软路由命令行配置(参考)_linux软路由-CSDN博客 VGW在 Windows 平台上局域网就绪的旁路由器程序_windows旁路由-CSDN博客 本文介绍 LINUX…...
「 机器人 」扑翼飞行器混合控制策略缺点浅谈
前言 将基于模型的控制与强化学习策略融合在扑翼飞行器中,虽然能够兼顾系统稳定性与极限机动能力,但也面临了更高的系统复杂性、对硬件算力与可靠性的额外要求,以及难以回避的能量效率等方面挑战。以下从四个方面进行归纳与分析。 1. 系统复杂性增加 1.1 两种控制方法的并存…...
RNN实现阿尔茨海默症的诊断识别
本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一 导入数据 import torch.nn as nn import torch.nn.functional as F import torchvision,torch from sklearn.preprocessing import StandardScaler from torch.utils.data import TensorDatase…...
HackTheBox靶机:Sightless;NodeJS模板注入漏洞,盲XSS跨站脚本攻击漏洞实战
HackTheBox靶机:Sightless 渗透过程1. 信息收集常规探测深入分析 2. 漏洞利用(CVE-2022-0944)3. 从Docker中提权4. 信息收集(michael用户)5. 漏洞利用 Froxlor6. 解密Keepass文件 漏洞分析SQLPad CVE-2022-0944 靶机介…...
docker安装elk6.7.1-搜集java日志
docker安装elk6.7.1-搜集java日志 如果对运维课程感兴趣,可以在b站上、A站或csdn上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频 0.规划 192.168.171.130 tomcat日志filebeat 192.168.171.131 …...
XML实体注入漏洞攻与防
JAVA中的XXE攻防 回显型 无回显型 cve-2014-3574...
Flutter 与 React 前端框架对比:深入分析与实战示例
Flutter 与 React 前端框架对比:深入分析与实战示例 在现代前端开发中,Flutter 和 React 是两个非常流行的框架。Flutter 是 Google 推出的跨平台开发框架,支持从一个代码库生成 iOS、Android、Web 和桌面应用;React 则是 Facebo…...
使用 Docker Compose 一键启动 Redis、MySQL 和 RabbitMQ
目录 一、Docker Compose 简介 二、服务配置详解 1. Redis 配置 2. MySQL 配置 3. RabbitMQ 配置 三、数据持久化与时间同步 四、部署与管理 五、总结 目录挂载与卷映射的区别 现代软件开发中,微服务架构因其灵活性和可扩展性而备受青睐。为了支持微服务的…...
【问题解决】el-upload数据上传成功后不显示成功icon
el-upload数据上传成功后不显示成功icon 原因 由于后端返回数据与要求形式不符,使用el-upload默认方法调用onSuccess钩子失败,上传文件的状态并未发生改变,因此数据上传成功后并未显示成功的icon标志。 解决方法 点击按钮,调用…...
spring框架之IoC学习与梳理(1)
目录 一、spring-IoC的基本解释。 二、spring-IoC的简单demo(案例)。 (1)maven-repository官网中找依赖坐标。 (2).pom文件中通过标签引入。 (3)使用lombok帮助快速开发。 ÿ…...
MQ的可靠消息投递机制
确保消息在发送、传递和消费过程中不会丢失、重复消费或错乱。 1. 消息的可靠投递 消息持久化: 消息被发送到队列后会存储在磁盘上,即使消息队列崩溃,消息也不会丢失。例如:Kafka、RabbitMQ等都支持持久化消息。Kafka通过将消息存…...
Mono里运行C#脚本35—加载C#语言基类的过程
前面大体地分析了整个Mono运行过程,主要从文件的加载,再到EXE文件的入口点, 然后到方法的编译,机器代码的生成,再到函数调用的跳板转换,进而解析递归地实现JIT。 但是还有很多功能没有解析的,就是C#语言相关最多的,就是类的加载,以及类语言设计的实现属性, 比如类的…...
location+rewrite实现隐性域名配置
隐性域名:访问www.a.com 则跳转到www.b.com的页面,但是地址栏还是显示www.a.com 1、配置基于根目录的隐性域名(就是nginx反向代理) 访问http://www.bbb.org:8002, 跳转http://www.accp.org:8001的页面,地址…...
150 Linux 网络编程6 ,从socket 到 epoll整理。listen函数参数再研究
一 . 只能被一个client 链接 socket例子 此例子用于socket 例子, 该例子只能用于一个客户端连接server。 不能用于多个client 连接 server socket_server_support_one_clientconnect.c /* 此例子用于socket 例子, 该例子只能用于一个客户端连接server。…...
centos7 配置国内镜像源安装 docker
使用国内镜像源:由于 Docker 的官方源在国内访问可能不稳定,你可以使用国内的镜像源,如阿里云的镜像源。手动创建 /etc/yum.repos.d/docker-ce.repo 文件,并添加以下内容: [docker-ce-stable] nameDocker CE Stable -…...
周末总结(2024/01/25)
工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…...
【go语言】map 和 list
一、map map 是一种无序的键值对的集合。 无序 :map[key]键值对:key - value map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。map 是一种集合,所以我们可以像迭代数组和切片那样迭代他。…...
PCIe 个人理解专栏——【2】LTSSM(Link Training and Status State Machine)
前言: 链路训练和状况状态机LTSSM(Link Training and Status State Machine)是整个链路训练和运行中状态的状态转换逻辑关系图,总共有11个状态。 正文: 包括检测(Detect),轮询&…...
《DiffIR:用于图像修复的高效扩散模型》学习笔记
paper:2303.09472 GitHub:GitHub - Zj-BinXia/DiffIR: This project is the official implementation of Diffir: Efficient diffusion model for image restoration, ICCV2023 目录 摘要 1、介绍 2、相关工作 2.1 图像恢复(Image Rest…...
Vue3 30天精进之旅:Day01 - 初识Vue.js的奇妙世界
引言 在前端开发领域,Vue.js是一款极具人气的JavaScript框架。它以其简单易用、灵活高效的特性,吸引了大量开发者。本文是“Vue 3之30天系列学习”的第一篇博客,旨在帮助大家快速了解Vue.js的基本概念和核心特性,为后续的深入学习…...
[笔记] 极狐GitLab实例 : 手动备份步骤总结
官方备份文档 : 备份和恢复极狐GitLab 一. 要求 为了能够进行备份和恢复,请确保您系统已安装 Rsync。 如果您安装了极狐GitLab: 如果您使用 Omnibus 软件包,则无需额外操作。如果您使用源代码安装,您需要确定是否安装了 rsync。…...
