rust学习-rust中的保留字

rust学习-rust中的保留字

  • 已使用的保留字
  • 未来可能使用的保留字

保留字是语言中预定义的标识符,不能用作变量名、函数名或其他自定义标识符,Rust的保留字大致可以分为两类:已使用的保留字和未来可能使用的保留字

已使用的保留字

  1. as:用于类型转换
let num: i32 = 5;
let float_num = num as f64;
  1. break:用于终止循环
loop {println!("再次循环");break;
}
  1. const:用于定义常量
const MAX_POINTS: u32 = 100_000;
  1. continue:用于跳过当前循环的剩余部分并开始下一次迭代
for i in 0..10 {if i % 2 == 0 {continue;}println!("奇数: {}", i);
}
  1. crate:用于指定 crate 根模块
// 在 Cargo.toml 中定义 crate
// Cargo.toml
[package]
name = "my_crate"
version = "0.1.0"
  1. 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);
  1. else:用于条件语句中的 if 之后的分支
let x = 5;
if x == 5 {println!("x 是 5");
} else {println!("x 不是 5");
}
  1. enum:用于定义枚举类型
enum Color {Red,Green,Blue,
}let color = Color::Red;
  1. extern:用于定义外部函数或链接外部库
extern "C" {fn printf(format: *const u8, ...) -> i32;
}fn main() {unsafe {printf(b"Hello, World!\0".as_ptr());}
}
  1. false:布尔常量,表示假
let is_false = false;
  1. fn:用于定义函数
fn add(a: i32, b: i32) -> i32 {a + b
}let sum = add(5, 3);
  1. for:用于循环
for i in 0..3 {println!("i: {}", i);
}
  1. if:用于条件语句
let x = 5;
if x > 0 {println!("x 是正数");
}
  1. 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));
  1. in:用于 for 循环或 match 语句
for i in 0..3 {println!("i: {}", i);
}match 2 {1 => println!("一是 1"),2 => println!("二是 2"),_ => println!("其他"),
}
  1. let:用于声明变量
let x = 5;
let y: i32 = 10;
  1. loop:用于无限循环
loop {println!("再次循环");break;
}
  1. match:用于模式匹配
let x = 2;
match x {1 => println!("一是 1"),2 => println!("二是 2"),_ => println!("其他"),
}
  1. mod:用于定义模块
mod my_module {pub fn say_hello() {println!("Hello from my_module!");}
}fn main() {my_module::say_hello();
}
  1. move:用于闭包捕获环境
let x = 5;
let y = 10;let closure = move || {println!("x: {}, y: {}", x, y);
};closure();
  1. mut:用于声明可变变量
let mut x = 5;
x = 10;
  1. pub:用于声明公共项
pub fn public_function() {println!("这是公共函数");
}mod my_mod {pub fn public_function() {println!("这是 my_mod 中的公共函数");}
}
  1. ref:用于在模式匹配中获取引用
let x = 5;
let ref_x = &x;match ref_x {ref r => println!("r 是引用: {:?}", r),
}
  1. return:用于从函数返回值
fn add(a: i32, b: i32) -> i32 {return a + b;
}let sum = add(5, 3);
  1. 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());
  1. 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);
  1. static:用于定义静态变量
static X: i32 = 5;fn main() {println!("X: {}", X);
}
  1. struct:用于定义结构体
struct Point {x: i32,y: i32,
}let p = Point { x: 3, y: 4 };
  1. 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();
}
  1. 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);
  1. true:布尔常量,表示真
let is_true = true;
  1. type:用于定义类型别名
type Kilometers = i32;let distance: Kilometers = 5;
  1. unsafe:用于编写不安全的代码
unsafe fn dangerous() {println!("这是不安全的代码");
}fn main() {unsafe {dangerous();}
}
  1. use:用于引入模块
mod my_mod {pub fn say_hello() {println!("Hello from my_mod!");}
}use my_mod::say_hello;fn main() {say_hello();
}
  1. where:用于指定 trait 约束
fn some_func<T: std::fmt::Display>(t: T) where T: std::fmt::Debug {println!("t: {:?}", t);
}fn main() {some_func(5);
}

未来可能使用的保留字

  1. abstract
  2. become
  3. box
  4. do
  5. final
  6. macro
  7. override
  8. priv
  9. typeof
  10. unsized
  11. virtual
  12. yield

这些保留字目前在 Rust 中没有具体的用途,但它们被预留以备将来扩展语言时使用

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

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

相关文章

【第七天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-一种常见的分治算法(持续更新)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Python数据结构与算法的详细介绍1.Python中的常用的分治算法2. 分治算法3.详细的分治代码1&#xff09;一种常见的分治算法 总结 前言 提示&#xff1a;这…

奖励模型:解析大语言模型的关键工具

标题&#xff1a;奖励模型&#xff1a;解析大语言模型的关键工具 文章信息摘要&#xff1a; 奖励模型是理解和审核大语言模型(LLM)的重要工具&#xff0c;通过简单的评估方式提供了模型内部表征和性能的深入洞察。它不仅能静态比较模型表现&#xff0c;还可帮助诊断训练问题&a…

[Linux]el8安全配置faillock:登录失败达阈值自动锁定账户配置

前言 本篇文章的配置仅使用于el8版本的Linux&#xff0c;目前已在centos8、BCLinux8上验证成功&#xff0c;其他版本系统是否可行还得考查。 el8中管理用户登录失败锁定账户所用的模块是faillock.so&#xff0c;如果想要将配置应用与其他版本的Linux&#xff0c;建议确认Linux…

【nnUNetv2进阶】二十七、nnUNetv2 魔改网络-小试牛刀-引入FMB模块

nnunet使用及改进教程。 【nnUNetv2实践】一、nnUNetv2安装 【nnUNetv2实践】二、nnUNetv2快速入门-训练验证推理集成一条龙教程 【nnUNe

vue3中自定一个组件并且能够用v-model对自定义组件进行数据的双向绑定

1. 基础用法 在 Vue3 中&#xff0c;v-model 在组件上的使用有了更灵活的方式。默认情况下&#xff0c;v-model 使用 modelValue 作为 prop&#xff0c;update:modelValue 作为事件。 1.1 基本示例 <!-- CustomInput.vue --> <template><input:value"mo…

TCP协议(网络)

目录 TCP协议 TCP协议段格式(报文首部) 原理图​编辑 确认应答(ACK)机制 报头介绍 超时重传机制​编辑 连接管理机制 为什么要三次握手 服务端状态转化: 客户端状态转化: 理解TIME_WAIT状态 解决TIME_WAIT状态引起的bind失败的方法(可以立即链接端口号) setsockop…

【JS|第29期】JavaScript中的事件类型

日期&#xff1a;2025年1月25日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

基于Java+socket实现多线程聊天室-控制台版

基于Javasocket实现多线程聊天室-控制台版 一、系统介绍二、功能展示1.运行效果 三、代码展示四、其它1.其他系统实现2.获取源码 一、系统介绍 首先启动server端&#xff0c;然后启动client端。任意一个client发送给server的消息都将会被转发给所有在线的client&#xff0c;实…

Redis-缓存

1.缓存 1.1 什么是缓存&#xff1f; 越野车,山地自行车,都拥有"避震器",防止车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的损害,像个弹簧一样;同样,实际开发中,系统也需要"避震器",防止过高的数据访问猛冲系统,导致其操作线程无法…

群晖docker获取私有化镜像http: server gave HTTP response to HTTPS client].

群晖docker获取私有化镜像提示http: server gave HTTP response to HTTPS clien 问题描述 层级时间用户事件Information2023/07/08 12:47:45cxlogeAdd image from xx.xx.31.240:1923/go-gitea/gitea:1.19.3Error2023/07/08 12:47:48cxlogeFailed to pull image [Get "http…

MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log

文章目录 一、前言1.1 MySQL体系结构1.2 MySQL日志分类1.3 其他几种日志1.3.1 查询日志1.3.2 慢查询日志1.3.3 错误日志 二、bin log 二进制日志2.1 bin log简介2.2 binlog日志格式2.3 日志删除2.4 写入/刷盘机制 三、undo log 回滚日志3.1 undo log简介3.2 隐藏字段 —— 事务…

算法中的移动窗帘——C++滑动窗口算法详解

1. 滑动窗口简介 滑动窗口是一种在算法中常用的技巧&#xff0c;主要用来处理具有连续性的子数组或子序列问题。通过滑动窗口&#xff0c;可以在一维数组或字符串上维护一个固定或可变长度的窗口&#xff0c;逐步移动窗口&#xff0c;避免重复计算&#xff0c;从而提升效率。常…

亚博microros小车-原生ubuntu支持系列:11手指控制与手势识别

识别框架还是沿用之前的了MediaPipe Hand。 背景知识不摘重复&#xff0c;参见之前的&#xff1a;亚博microros小车-原生ubuntu支持系列&#xff1a;10-画笔-CSDN博客 手指控制 src/yahboom_esp32_mediapipe/yahboom_esp32_mediapipe/目录下新建文件10_HandCtrl.py&#xff…

LabVIEW太阳能照明监控系统

在公共照明领域&#xff0c;传统的电力照明系统存在高能耗和维护不便等问题。利用LabVIEW开发太阳能照明监控系统&#xff0c;通过智能控制和实时监测&#xff0c;提高能源利用效率&#xff0c;降低维护成本&#xff0c;实现照明系统的可持续发展。 ​ 项目背景 随着能源危机…

今何在:“思索答案就是一种对虚无的战斗”

今何在&#xff08;网络文学作家、编剧&#xff09; 白惠元&#xff08;北京师范大学文学院副教授&#xff09; 网络文学发展二十余年来&#xff0c;其创作生态虽历经迭代&#xff0c;同时也为当代文学版图留下了一些经典性长篇作品。本栏目邀请北京大学网络文学研究团队&…

Linux的权限和一些shell原理

目录 shell的原理 Linux权限 sudo命令提权 权限 文件的属性 ⽂件类型&#xff1a; 基本权限&#xff1a; chmod改权限 umask chown 该拥有者 chgrp 改所属组 最后&#xff1a; 目录权限 粘滞位 shell的原理 我们广义上的Linux系统 Linux内核Linux外壳 Linux严格…

Avalonia UI MVVM DataTemplate里绑定Command

Avalonia 模板里面绑定ViewModel跟WPF写法有些不同。需要单独绑定Command. WPF里面可以直接按照下面的方法绑定DataContext. <Button Content"Button" Command"{Binding DataContext.ClickCommand, RelativeSource{RelativeSource AncestorType{x:Type User…

MATLAB语言的文件操作

MATLAB语言的文件操作 1. 引言 MATLAB是一种高性能的语言&#xff0c;广泛应用于数学计算、数据分析和可视化等领域。在实际的应用中&#xff0c;经常需要对文件进行操作&#xff0c;包括读取文件、写入文件以及对文件进行修改等。本文将详细探讨MATLAB的文件操作&#xff0c…

用wordpress搭建跨境电商独立站后没有询盘该怎么办

如果在使用WordPress搭建跨境电商独立站后没有收到询盘&#xff0c;可以采取以下详细解决办法&#xff1a; 优化网站基础建设 选择合适的域名和主机 建议选择国际化的域名(如以.com结尾)&#xff0c;并选择支持SEO优化的主机服务商&#xff0c;例如Namecheap或SiteGround&am…

ConnectionResetError: [Errno 104] Connection reset by peer

python遇到这样一个报错&#xff1a; imap imaplib.IMAP4_SSL("outlook.office365.com", 993)File "/usr/lib/python3.9/imaplib.py", line 1324, in __init__IMAP4.__init__(self, host, port, timeout)File "/usr/lib/python3.9/imaplib.py",…