Rust 基础语法

Rust 基础语法

Rust 是一种系统编程语言,由 Mozilla 开发,专注于安全、速度和并发性。它是一种静态类型的语言,具有丰富的类型系统和所有权模型,这使得它在编译时能够提供内存安全保证。Rust 的语法受到了多种编程语言的影响,包括 C++、Haskell 和 OCaml。本文将介绍 Rust 的一些基础语法,帮助初学者快速入门。

变量和数据类型

Rust 中的变量使用 let 关键字声明,并且是默认不可变的。如果需要声明可变变量,可以在变量名前加上 mut 关键字。Rust 是静态类型语言,但大多数情况下,类型推导可以让编译器自动推断出变量的类型。

let x = 42; // x 是不可变的,类型为 i32
let mut y = 3.14; // y 是可变的,类型为 f64

Rust 有几种基本数据类型,包括整数(如 i32u32)、浮点数(如 f64)、布尔值(bool)、字符(char)和元组(tuple)。

函数

Rust 中的函数使用 fn 关键字定义。函数可以接受参数并返回值。函数的返回类型位于参数列表之后,用箭头 -> 指示。

fn add(x: i32, y: i32) -> i32 {x + y // Rust 自动返回最后一个表达式的值
}

控制流

Rust 提供了基本的控制流结构,包括 if 表达式、循环和匹配(match)表达式。

if x < 5 {println!("x is less than 5");
} else {println!("x is 5 or more");
}// 循环
loop {println!("Loop forever!");
}// 循环中的 break
let mut counter = 0;
loop {counter += 1;if counter == 10 {break;}
}// 匹配表达式
match x {1 => println!("One"),2 => println!("Two"),_ => println!("Something else"), // _ 是通配符,匹配任何值
}

所有权和借用

Rust 的所有权模型是其核心特性之一,它确保了内存安全,无需垃圾回收。在 Rust 中,每个值都有一个所有者,当所有者超出作用域时,该值将被丢弃。

{let s = String::from("hello"); // s 是字符串的所有者
} // 这里 s 离开作用域,字符串被丢弃

Rust 还允许借用,即允许引用一个值而不取得其所有权。借用可以是可变的或不可变的。

let mut s = String::from("hello");
let r1 = &s; // 不可变借用
let r2 = &mut s; // 可变借用

结构体和枚举

Rust 使用 struct 关键字定义结构体,使用 enum 关键字定义枚举。

struct User {username: String,email: String,sign_in_count: u64,active: bool,
}enum Color {Red,Green,Blue,
}

错误处理

Rust 使用 ResultOption 类型来处理可能的错误和空值。

fn divide(numerator: f64, denominator: f64) -> Result<f64, String> {if denominator == 0.0 {Err("Cannot divide by zero".to_string())} else {Ok(numerator / denominator)}
}

模块和包

Rust 使用 mod 关键字创建模块,使用 crate 关键字表示一个包。模块和包有助于组织代码并控制其可见性。

mod front_of_house {mod hosting {fn add_to_waitlist() {}}
}fn main() {front_of_house::hosting::add_to_waitlist();
}

总结

Rust 的基础语法涵盖了变量、数据类型、函数、控制流、所有权和借用、结构体和枚举、错误处理以及模块和包。这些基础知识是进一步学习 Rust 的前提,有助于编写安全、高效的系统级代码。随着对 Rust 的深入,您将接触到更多高级特性,如泛型、特性(traits)、生命周期(lifetimes)和并发编程。

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

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

相关文章

【拥抱AI】Milvus 如何处理 TB 级别的大规模向量数据?

处理 TB 级别的大规模向量数据是 Milvus 的核心优势之一。Milvus 通过分布式架构、高效的索引算法和优化的数据管理策略来实现这一目标。下面将详细介绍 Milvus 如何处理 TB 级别向量数据的流程&#xff0c;包括插入代码示例、指令以及流程图。 1. 分布式架构 Milvus 使用分…

Scrapy管道设置和数据保存

1.1 介绍部分&#xff1a; 文字提到常用的Web框架有Django和Flask&#xff0c;接下来将学习一个全球范围内流行的爬虫框架Scrapy。 1.2 内容部分&#xff1a; Scrapy的概念、作用和工作流程 Scrapy的入门使用 Scrapy构造并发送请求 Scrapy模拟登陆 Scrapy管道的使用 Scrapy中…

k8s集群部署metrics-server

1、Metrics Server介绍 Metrics Server 是集群级别的资源利用率数据的聚合器。从 Kubelets收集资源指标&#xff0c;并通过 Metrics API 在 Kubernetes apiserver 中公开它们&#xff0c;以供 Horizontal Pod Autoscaler 和Vertical Pod Autoscaler 使用。 Metrics API 也可以…

什么是串联谐振

比如有一个由电阻、电容和电感的串联电路中&#xff0c;存在一个频率能使这个电路的电流最大&#xff0c;这个现象就叫谐振。 那么这个频率是多少呢&#xff1f; 交流电频率与电路固有频率一致时&#xff0c;它就能发生谐振&#xff0c;此时这个电路的电流是最大的 这个固有频…

(vue)启动项目报错The project seems to require pnpm but it‘s not installed

(vue)启动项目报错The project seems to require pnpm but it’s not installed 原因 该错误信息表明你的项目需要使用 pnpm 作为包管理工具&#xff0c;但系统中尚未安装 pnpm。 解决方法 【1】删除pnpm.lock 【2】npm install -g pnpm 之后再重新启动 yarn报错&#xff0…

Laravel8.5+微信小程序实现京东商城秒杀方案

一、商品秒杀涉及的知识点 鉴权策略封装掊口访问频次限制小程序设计页面防抖接口调用订单创建事务使用超卖防御 二、订单库存系统方案&#xff08;3种&#xff09; 下单减库存 优点是库存和订单的强一致性&#xff0c;商品不会卖超&#xff0c;但是可能导致恶意下单&#xff…

JVM:即时编译器,C2 Compiler,堆外内存排查

1&#xff0c;即时编译器 1.1&#xff0c;基本概念 常见的编译型语言如C&#xff0c;通常会把代码直接编译成CPU所能理解的机器码来运行。而Java为了实现“一次编译&#xff0c;处处运行”的特性&#xff0c;把编译的过程分成两部分&#xff0c;首先它会先由javac编译成通用的…

屏幕分辨率|尺寸|颜色深度指纹修改

一、前端通过window.screen接口获取屏幕分辨率 尺寸 颜色深度&#xff0c;横屏竖屏信息。 二、window.screen c接口实现&#xff1a; 1、third_party\blink\renderer\core\frame\screen.idl // https://drafts.csswg.org/cssom-view/#the-screen-interface[ExposedWindow ] …

【C#设计模式(15)——命令模式(Command Pattern)】

前言 命令模式的关键通过将请求封装成一个对象&#xff0c;使命令的发送者和接收者解耦。这种方式能更方便地添加新的命令&#xff0c;如执行命令的排队、延迟、撤销和重做等操作。 代码 #region 基础的命令模式 //命令&#xff08;抽象类&#xff09; public abstract class …

Linux基础项目包含(DNS,FTP,Samba)

今天我们来实现一个linux的基础项目&#xff0c;多做项目可以加深我们对每个服务的掌握程度&#xff0c;能更加的熟悉各个服务的使用&#xff0c;以及每个服务之间如何相互应用&#xff0c;我们可以有一个清晰的认知&#xff0c;那么接下来我们就开始项目的实操。 一、 项目背…

鸿蒙面试 --- 性能优化

性能优化可以从三个方面入手 感知流畅、渲染性能、运行性能 感知流畅 在应用开发中&#xff0c;动画可以为用户界面增添生动、流畅的交互效果&#xff0c;提升用户对应用的好感度。然而&#xff0c;滥用动画也会导致应用性能下降&#xff0c;消耗过多的系统资源&#xff0c;…

UWB数字钥匙安全测距和场景应用

1. CCC数字钥匙 2021年7月CCC将UWB定义为第三代数字钥匙的核心技术&#xff0c;并发布CCC R3&#xff08;第三代数字钥匙&#xff09;规范。 CCC R3是基于NFC/BLE/UWB作为基础的无线电技术的使用&#xff0c;该系统采用非对称密码技术对车辆和设备进行相互签名认证&#xff0…

使用Compose Multiplatform开发跨平台的Android调试工具

背景 最近对CMP跨平台很感兴趣&#xff0c;为了练手&#xff0c;在移动端做了一个Android和IOS共享UI和逻辑代码的天气软件&#xff0c;简单适配了一下双端的深浅主题切换&#xff0c;网络状态监测&#xff0c;刷新调用振动器接口。 做了两年多车机Android开发&#xff0c;偶…

ubuntu22开机自动登陆和开机自动运行google浏览器自动打开网页

一、开机自动登陆 1、打开settings->点击Users 重启系统即可自动登陆桌面 二、开机自动运行google浏览器自动打开网页 1、安装google浏览器 sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i ./google-chrome-stable…

前端学习笔记之文件下载(1.0)

因为要用到这样一个场景&#xff0c;需要下载系统的使用教程&#xff0c;所以在前端项目中就提供了一个能够下载系统教程的一个按钮&#xff0c;供使用者进行下载。 所以就试着写一下这个功能&#xff0c;以一个demo的形式进行演示&#xff0c;在学习的过程中也发现了中文路径…

FPGA实现GTP光口视频转USB3.0传输,基于FT601+Aurora 8b/10b编解码架构,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 GT 高速接口解决方案本博已有的FPGA驱动USB通信方案 3、工程详细设计方案工程设计原理框图输入Sensor之-->OV5640摄像头输入Sensor之-->芯片解码的…

借助nntools的模型训练(图像去噪任务, PyTorch)

在跑通开源代码的过程中&#xff0c;一直难以找到很合适的代码框架或代码模板&#xff0c;尤其对于初学者而言是不小的挑战。本人在跑代码的过程中&#xff0c;发现在GitHub上有一个辅助训练过程的模板。这篇文章主要记录它的使用方法&#xff0c;并标记来源。 代码均在jupyter…

C# 常量

文章目录 前言一、整数常量&#xff08;一&#xff09;合法与非法实例对比&#xff08;二&#xff09;不同进制及类型示例 二、浮点常量三、字符常量四、字符串常量五、定义常量 前言 在 C# 编程的世界里&#xff0c;常量是一类特殊的数据元素&#xff0c;它们如同程序中的 “定…

PHP 生成分享海报

因为用户端有多个平台&#xff0c;如果做分享海报生成&#xff0c;需要三端都来做&#xff0c;工作量比较大。 所以这个艰巨的任务就光荣的交给后端了。经过一定时间的研究和调试&#xff0c;最终圆满完成了任务&#xff0c;生成分享海报图片实现笔记如下。 目录 准备字体文件…

探索Python词云库WordCloud的奥秘

文章目录 探索Python词云库WordCloud的奥秘1. 背景介绍&#xff1a;为何选择WordCloud&#xff1f;2. WordCloud库简介3. 安装WordCloud库4. 简单函数使用方法5. 应用场景示例6. 常见Bug及解决方案7. 总结 探索Python词云库WordCloud的奥秘 1. 背景介绍&#xff1a;为何选择Wo…