Rust 中的关键字以及示例

news/2024/11/15 11:14:53/文章来源:https://www.cnblogs.com/risheng/p/18398408

1. 常见关键字

  • as: 用于类型转换,例如将一个值从一种类型转换为另一种类型。
let x: i32 = 42;
let y: u8 = x as u8;
  • break: 用于提前退出循环。
for i in 0..10 {if i == 5 {break;}
}
  • const: 定义一个常量,常量的值在编译时就确定,不会在运行时改变。
const MAX_POINTS: u32 = 100_000;
  • continue: 跳过当前循环中的剩余部分,直接进入下一次循环迭代。
for i in 0..10 {if i % 2 == 0 {continue;}println!("{}", i);
}
  • crate: 表示当前包或库的根模块,通常用于定义或引用其他模块。
pub fn my_function() {println!("This is a function in the crate root.");
}
  • else: 与 if 搭配使用,表示条件不满足时执行的代码块。
if x > 5 {println!("Greater than 5");
} else {println!("Not greater than 5");
}
  • enum: 定义一个枚举类型,它可以包含多个不同类型的变体(variants)。
enum Direction {Up,Down,Left,Right,
}
  • extern: 用于外部函数或变量的声明,通常用于与 C 语言的交互。
extern "C" {fn printf(format: *const u8, ...) -> i32;
}
  • false: 布尔值字面值。
let a = false;
  • fn: 定义一个函数。
fn my_function() {println!("Hello, world!");
}
  • for: 用于循环,通常与迭代器结合使用。
for i in 0..5 {println!("{}", i);
}
  • if: 条件语句,根据表达式的真假选择执行的代码块。
if x > 5 {println!("Greater than 5");
}
  • impl: 实现一个 trait 或为一个类型实现方法。
struct MyStruct;impl MyStruct {fn new() -> MyStruct {MyStruct}
}
  • in: for 循环语法。
for i in vec![1,2,3] {println!("{}", i);
}
  • let: 绑定一个值到变量。
let x = 5;
  • loop: 定义一个无限循环,可以用 break 退出循环。
loop {println!("This will print forever!");break; // Exit the loop
}
  • match: 模式匹配,类似于 switch/case 语句。
match x {1 => println!("One"),2 => println!("Two"),_ => println!("Something else"),
}
  • mod: 定义一个模块,模块是代码的组织单位。
mod my_module {pub fn my_function() {println!("Hello from the module!");}
}
  • move: 使闭包获取其捕获项的所有权,而不是借用。
let x = vec![1, 2, 3];
// 使用 move 将 x 的所有权移动到闭包中
let equal_to_x = move |z| z == x;
// 此时 x 已经被移动到闭包中,不能在此处再访问 x
// println!("{:?}", x); // 这行代码会报错
  • mut: 标记一个变量是可变的。
let mut x = 5;
x = 6;
  • pub: 公开一个模块、函数或变量,使其可以从其他模块访问。
pub fn public_function() {println!("This function is public!");
}
  • return: 从函数返回一个值。
fn my_function() -> i32 {return 5;
}
  • Self: 定义或实现 trait 的类型的类型别名。
impl Rectangle {fn new(width: u32, height: u32) -> Self {Self { width, height } // `Self` 指代 `Rectangle`}
}
  • self: 表示方法本身或当前模块。
struct Rectangle {width: u32,height: u32,
}
impl Rectangle {fn area(&self) -> u32 {self.width * self.height // `self` 指代 `Rectangle` 的实例}
}
  • static: 表示全局变量或在整个程序执行期间保持其生命周期。
static HELLO: &str = "Hello, world!";
let s: &'static str = "Hello, world!";
  • struct: 定义一个结构体。
struct MyStruct {field1: i32,field2: f64,
}
  • super: 表示当前模块的父模块。
mod parent {pub struct ParentStruct {pub name: String,}pub fn hello() {println!("Hello from parent module");}pub mod child {pub fn create_parent_struct(name: &str) -> super::ParentStruct {super::ParentStruct { name: name.to_string() } // 访问父模块中的结构体}pub fn hello_from_child() {super::hello(); // 使用 `super` 访问父模块中的 `hello` 函数}}
}fn main() {parent::child::hello_from_child();let parent_struct = parent::child::create_parent_struct("Rust");println!("Created ParentStruct with name: {}", parent_struct.name);
}
  • trait: 定义一组方法的集合,类似于接口。
trait MyTrait {fn do_something(&self);
}
  • true: 布尔值字面值。
let bool = true;
  • use: 导入一个模块、类型或函数到当前作用域。
use std::collections::HashMap;
  • where: 为泛型或类型约束指定条件。
fn my_function<T>(x: T) where T: std::fmt::Display {println!("{}", x);
}
  • while: 定义一个循环,当条件为真时继续执行。
while x < 10 {x += 1;
}

2. 特殊关键字

  • unsafe: 用于声明一个不安全的代码块,允许执行一些通常被禁止的操作,例如解引用裸指针。
let p: *const i32 = &10;
unsafe {println!("p points to: {}", *p);
}
  • async: 用于定义一个异步函数,返回一个 Future
async fn my_async_function() {// asynchronous code
}
  • await: 等待一个异步操作完成。
my_async_function().await;
  • dyn: 用于动态分发,实现类似于面向对象语言中的多态性。
fn my_function(p: &dyn MyTrait) {p.do_something();
}
  • ref: 引用模式匹配中的值。
let tuple = (42, "hello");
let (x, ref y) = tuple;
  • type: 定义一个类型别名。
type Kilometers = i32;
  • union: 定义一个联合体,允许一个数据结构在同一位置存储不同类型的数据。
union MyUnion {i: i32,f: f32,
}

3. 保留但未使用的关键字

这些关键字在当前 Rust 版本中没有使用,但它们可能在将来被采用,因此不能作为标识符使用:

  • abstract
  • become
  • box
  • do
  • final
  • macro
  • override
  • priv
  • try
  • typeof
  • unsized
  • virtual
  • yield

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

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

相关文章

跨域——应对浏览器同源策略的一种方案

理解跨域,首先需要理解同源策略 (Same origin policy)。 何为源origin

LigerUI 中的 Grid (ligerGrid) 合并单元格

在网上搜索了很都都没有正确的方法实现 合并单元格, LigerGrid 不像 EasyUI 中的 Grid 可以直接 合并单元格。 我化了点时间,解决了, 就分享给大家, 我就不做详细的注释, 只有有一定基础的都可以看懂, 菜鸟就自己去补习吧。<div id="maingrid" style="…

linux系统下各种日志文件的介绍,查看,及日志服务配置

转载于https://zhuanlan.zhihu.com/p/298335887 ,侵权删! linux系统日志文件的详细介绍 日志文件的作用 日志文件用于记录linux系统的各种运行信息的文件,相当于linux主机的日记,不同的日志文件记载了不同类型的信息,如Linux内核消息、用户登录事件、程序错误等。. 日志文件…

金融保险行业ITSM案例分析报告

一、 项目背景 随着金融保险行业竞争的日益激烈以及信息技术的快速发展,数字化转型已成为企业发展的必由之路。然而,许多金融机构的信息中心仍然面临“重建设轻运维”的问题,即在信息化基础设施建设投入巨大之后,后续的运维管理却未能跟上步伐,导致信息化支撑力量薄弱。这…

maven项目中引入本地jar包配置

服务在本地可以正常运行,打包后放在服务器就无法运行,原来是引入的本地jar包maven没有打包上去 首先jar包是放在资源目录下的lib里pom文件在引入时指定jar包的路径,maven引入不会报错,但是打包后没有这个jar包<dependency><groupId>com.sun.jna.examples</g…

在stable diffussion中控制生成图片的光线Kj

合集 - AIGC(27)1.轻松复现一张AI图片04-222.Stable Diffusion中的常用术语解析04-233.Stable diffusion中这些重要的参数你一定要会用04-244.Stable Diffusion中的embedding04-255.怎么使用Stable diffusion中的models05-286.Stable Diffusion WebUI详细使用指南05-297.Stable…

NET程序内存泄漏处理技巧/调试内存泄漏教程

NET程序内存泄漏处理技巧/调试内存泄漏教程NET程序内存泄漏处理技巧/调试内存泄漏教程 什么是Dump(dmp)文件? Dump是计算机技术中的重要概念,用于将内存中的数据转储到外部存储设备中,以便在出现故障时进行排查和分析。Dump文件又叫内存转储文件或者叫内存快照文件。用于存…

代码随想录day52 || 图论搜索 岛屿数量,岛屿的最大面积

图遍历 dfs 深度优先搜索bfs 广度优先搜索200 岛屿数量(dfs) var dirPath = [][]int{{0, -1}, {1, 0}, {0, 1}, {-1, 0}} // 上, 右, 下, 左 var visited [][]bool func numIslands(grid [][]byte) int {// dfs 深度优先遍历,对于每一个节点,按照上下左右四个固定顺序遍…

采购订单的审批、撤回审批及拒绝 ME29N

原文链接:https://blog.csdn.net/z_x_xing_/article/details/90201003 前台操作,如下图:点击图中的批准按钮,逐级完成采购订单的审批节点。2.查看表中数据发布状态——对应前台界面当前已审批的节点BAPI使用 CALL FUNCTION BAPI_PO_RELEASE EXPORTING PURCHASEORDE…

会话状态在此上下文中不可用——解决方法

原文链接:https://www.cnblogs.com/lczblog/p/3596481.html问题原因分析:项目中包含各种类型的文件 访问.html的时候无法获取Session 解决办法:在上图中出现错误之前添加判断 当访问的是.aspx类型的文件时在访问Session if (!application.Context.Handler.ToString().EndsWi…

naocs 作为服务注册与发现和配置中心

下载和安装 国内的软件,去官网下就行了,下载好后到其 bin 目录执行命令 startup.cmd -m standalone 服务就会启动浏览器访问,能访问到 nacos 界面小试牛刀工程导入依赖 <!-- 当前服务注册到 nacos 需要 --> <dependency><groupId>com.alibaba.cloud</g…