Rust 基础语法

news2025/3/16 13:06:06

Rust 基础语法

变量,基本类型,函数,注释和控制流,这些几乎是每种编程语言都具有的编程概念。

这些基础概念将存在于每个 Rust 程序中,及早学习它们将使你以最快的速度学习 Rust 的使用。

变量

首先必须说明,Rust 是强类型语言,但具有自动判断变量类型的能力。这很容易让人与弱类型语言产生混淆。

如果要声明变量,需要使用 let 关键字。例如:

let a = 123;

只学习过 JavaScript 的开发者对这句话很敏感,只学习过 C 语言的开发者对这句话很不理解。

在这句声明语句之后,以下三行代码都是被禁止的:

a = "abc";
a = 4.56; 
a = 456;

第一行的错误在于当声明 a 是 123 以后,a 就被确定为整型数字,不能把字符串类型的值赋给它。

第二行的错误在于自动转换数字精度有损失,Rust 语言不允许精度有损失的自动数据类型转换。

第三行的错误在于 a 不是个可变变量。

前两种错误很容易理解,但第三个是什么意思?难道 a 不是个变量吗?

这就牵扯到了 Rust 语言为了高并发安全而做的设计:在语言层面尽量少的让变量的值可以改变。所以 a 的值不可变。但这不意味着 a 不是"变量"(英文中的 variable),官方文档称 a 这种变量为"不可变变量"。

如果我们编写的程序的一部分在假设值永远不会改变的情况下运行,而我们代码的另一部分在改变该值,那么代码的第一部分可能就不会按照设计的意图去运转。由于这种原因造成的错误很难在事后找到。这是 Rust 语言设计这种机制的原因。

当然,使变量变得"可变"(mutable)只需一个 mut 关键字。

let mut a = 123;
a = 456;

这个程序是正确的。

常量与不可变变量的区别

既然不可变变量是不可变的,那不就是常量吗?为什么叫变量?

变量和常量还是有区别的。在 Rust 中,以下程序是合法的:

let a = 123;   // 可以编译,但可能有警告,因为该变量没有被使用
let a = 456;

但是如果 a 是常量就不合法:

const a: i32 = 123;
let a = 456;

变量的值可以"重新绑定",但在"重新绑定"以前不能私自被改变,这样可以确保在每一次"绑定"之后的区域里编译器可以充分的推理程序逻辑。 虽然 Rust 有自动判断类型的功能,但有些情况下声明类型更加方便:

let a: u64 = 123;

这里声明了 a 为无符号 64 位整型变量,如果没有声明类型,a 将自动被判断为有符号 32 位整型变量,这对于 a 的取值范围有很大的影响。

重影(Shadowing)

重影的概念与其他面向对象语言里的"重写"(Override)或"重载"(Overload)是不一样的。重影就是刚才讲述的所谓"重新绑定",之所以加引号就是为了在没有介绍这个概念的时候代替一下概念。

重影就是指变量的名称可以被重新使用的机制:

实例

fn main() {  
    let x = 5;  
    let x = x + 1;  
    let x = x * 2;  
    println!("The value of x is: {}", x);  
}  

这段程序的运行结果:

The value of x is: 12

重影与可变变量的赋值不是一个概念,重影是指用同一个名字重新代表另一个变量实体,其类型、可变属性和值都可以变化。但可变变量赋值仅能发生值的变化。

let mut s = "123";
s = s.len();

这段程序会出错:不能给字符串变量赋整型值。

总结

  1. rust 作为强类型语言,但是也有自动判断类型的能力,所以它的使用有点类似于c++的size_t 或者 auto 。我们使用的关键字是 let。 可以简单记录为 let 走天下。创建变量? let。更新变量 ? let

  2. 由此引出第二点,不再是传统的一次创建,任意更改。

    1. rust中,由于为高并发而做的努力,它不再允许随意更改。
    2. 你可以想象在以往高并发中死锁和数据污染导致的令人头大的后果和补救措施,以及我们为此做出的巨大妥协和投入了大量的成本。
    3. 现在,我们将他限制住了。
  3. 每次修改变量时,有两种方式:

    1. 使用let关键字每次修改,重新声明。(既是重影)
      1. 这样使用时,编译会告警。
    2. 添加mut 关键字 (mutable)
      let mut zry = 123;
      zry = 432;
      //但是类型修改时还是不行,这是原则问题>_<
      zry = 'zry';
      zry = 123.1;
      
  4. 后置的类型强声明

    1. 在rust 中,类型的声明是可以显式限制的,毕竟是强类型嘛。
    2. 在显式声明时, 语法为 变量后 :类型如:
      let z: i32 = 123;
      let r: u64 = 234;
      
    3. 其意义在于当我们想以更大的空间容纳数据但我又不想使用新的空间时,或者想要预留更大的空间时方便
  5. 重影

    1. 在学习Rust 的过程中,你会发现一些很酷的内容,我们在重定义变量这个操作时,不会直白的说,我在这里重定义了,而是说 重影。这个蛮中二的词雀氏让我有种高大冷峻的范。
    2. 那么实际重影做的是什么呢?我们之前说了Rust 并发安全,所以限制随意修改变量值。但我们有两种方式实现修改。第一种就是重影
    3. 代码实现:
      let z = 1;
      let z = z+1;
      let z = z*2;
      let z = z*z;
      printin!("z is {}",z)

    在这里插入图片描述

  6. mut 改变的只能是同类型值在这里插入图片描述

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

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

相关文章

AIAgent来了!AutoGPT的新对手

AutoGPT 和 AgentGPT遇到了更强的对手&#xff0c;我来介绍一下 http://AIAgent.app 这个网站。 http://AIAgent.app 是一个可以让你使用人工智能代理来完成各种任务的网站。你只需要设置一个目标&#xff0c;然后选择一个合适的代理&#xff0c;它就会自动为你执行任务&#…

LED显示屏薄膜类型有哪些

LED显示屏薄膜是指应用在LED显示屏的薄膜材料&#xff0c;用于保护LED模块和增强显示效果。以下是LED显示屏薄膜知识的详细说明&#xff1a; 防护膜&#xff08;Protective Film&#xff09;&#xff1a;防护膜是一层透明的薄膜材料&#xff0c;常用于覆盖在LED显示屏的正面&am…

Android 手机自动化测试工具有哪几种?

文章大纲&#xff1a; 1、Android手机自动化测试工具&#xff0c;常用的有这7种 2、化繁为简&#xff0c;补充移动端自动化测试工具 3、这么多工具&#xff0c;工作中该如何选择 4、掌握自动化测试工具的学习建议 一、Android手机自动化测试工具&#xff0c;常用的有这7中&…

退休大厂软件测试面试官给大家的一些建议

最近因为又要增加用人&#xff0c;就又开始忙于招聘&#xff0c;一段时间下来遇到不少有趣的事情&#xff0c;结合之前的面试经验&#xff0c;就简单记录一下。 火眼金睛&#xff1a;识别真假 为什么一开始要说这个&#xff0c;因为最近确实遇到很多编造的简历&#xff0c;给…

如何选择到最合适的DDoS缓解服务?

DDoS缓解服务提供商的数量可能很多&#xff0c;但只有一些提供商提供高效服务的所有必要功能&#xff0c;因此如果要选择正确的 DDoS保护解决方案&#xff0c;必须考虑以下因素&#xff1a; 1.缩小风险范围 选择DDoS缓解服务的第一步&#xff0c;确定您组织的特定需求&#…

DDoS缓解的基本工作原理和关键功能

什么是DDoS缓解&#xff1f; DDoS 缓解是指成功保护目标服务器或网络以抵御分布式拒绝服务 (DDoS) 攻击的过程&#xff0c;目标受害者可以使用专门设计的网络设备或基于云的保护服务缓解传入的威胁。 为什么需要DDoS缓解解决方案&#xff1f; 由于网络构成的基本逻辑&#xf…

Virt-Mnager 虚拟机桥接网络

前言 以下针对linux 下 virt-manager 管理kvm虚拟机配置网络类型&#xff0c;默认为nat。 nat网络模式&#xff0c;虚拟机之间可通信&#xff0c;虚拟机和主机可通信&#xff0c;不可与主机外的网络通信&#xff1b; 桥接网络模式&#xff0c;虚拟机之间可通信&#xff0c;虚拟…

Bluez 的一些概念

目录 1&#xff0c;Linux 和蓝牙架构 2&#xff0c;D-Bus 相关概念 2.1 Message Buses 2.2 Client, Server and Connections 2.3 Object, Interface, Methods, Signals and Properties 2.3.1 Object, Interface, Methods 2.3.2 Signal 2.3.3 Properties 3&#xff0c;St…

光速上手matlab入门级学习必看matlab超长细练习matlab,福利分享Matlab全套资料

福利&#xff1a;末文有Matlab全套哦 实践是检验知识和技能的唯一标准。只有将所学的知识应用到实际问题中&#xff0c;并通过实践不断地调整和完善&#xff0c;才能真正掌握和理解这些知识。 在 MATLAB 中&#xff0c;可以通过编写代码、运行程序、调试错误等方式进行实践。…

大语言模型高质量提示词最佳实践

大语言模型高质量提示词最佳实践 一、提供更清晰的指令 使用大语言模型&#xff08;类似ChatGPT、Bard等工具&#xff09;的过程中&#xff0c;一个关键的技巧是能够给出清晰和明确的指令。大语言模型的运作方式是根据提供的输入&#xff0c;预测接下来应该生成什么内容。因此…

Mysql经典例题练习与总结

一、创建数据表并插入数据 -- 1、学生表 -- Student(s_id,s_name,s_birth,s_sex) &#xff1a;学生编号、姓名、年月、性别 CREATE TABLE IF NOT EXISTS Student (s_id VARCHAR (20),s_name VARCHAR (20) NOT NULL DEFAULT ,s_birth VARCHAR (20) NOT NULL DEFAULT ,s_sex VAR…

使用一键安装工具快速搭建 ESP-IDF 开发环境 (Windows)

我们收到用户对 ESP-IDF SDK 软件开发环境感到搭建难、门槛高的反馈。为解决用户在此方面的问题。为此&#xff0c;我们推出本期教程介绍在 Windows 操作系统下使用一键安装工具快速搭建 ESP-IDF 开发环境。 您可以观看下面的教程视频&#xff0c;也可以阅读接下来本篇的图文教…

动态规划dp —— 25.单词拆分

1.状态表示 是什么&#xff1f;dp表中里的值所表示的含义就是状态表示 dp[i]表示&#xff1a;[0,i]区间内的字符串&#xff0c;能否被字典中的单词拼接而成&#xff08;存ture或false&#xff09; 2.状态转移方程 dp[i] 等于什么 根据最后一个位置&#xff0c;来划分问题&a…

easyPOI导出多Sheet

easyPOI导出多Sheet 声明&#xff0c;本文基于JAVA操作Excel&#xff08;POI、easyPOI、easyExcel_我认不到你的博客-CSDN博客讲解&#xff0c;需要基础的可以看这篇&#xff0c;特别是Excel注解 本篇最后有工具类和自定义的注解类&#xff0c;只需要傻瓜式复制粘贴应该就可以用…

与 NGINX 团队直接交流 | 微服务之月火热报名中

原文作者&#xff1a;NGINX 原文链接&#xff1a;与 NGINX 团队直接交流 | 微服务之月火热报名中 转载来源&#xff1a;NGINX 官方网站 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.cn 又是一个热情似火的六月&#xff0c;一年一度的 Microservices June 微服务之月再…

6.12 共享内存(内存映射的使用、注意事项、进程间通信、systemV共享内存)

目录 system V IPC 共享内存 共享内存使用步骤 system V IPC -key system V IPC -ftok system V IPC -ftok-示例 共享内存创建-shmget 共享内存创建-shmget-示例1 共享内存创建-shmget-示例2 共享内存映射-shmat 共享内存读写 - 示例 共享内存撤销映射 - shmdt 共享…

etcd基本使用

目录 CRUD1、基本的put/get/del2、获取当前所有的key3、获取/删除带有前缀的键 lease使用1、创建lease&#xff0c;续租lease&#xff0c;撤销lease2、将lease attach到key上 watch使用watch、watch_oncereplacedeletewatch_prefix、watch_prefix_oncecancel_watchadd_watch_ca…

抖音整治短剧类小程序内容

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 短剧CPS项目这两年不是挺火的吗&#xff0c;很多草根创业者都在做短剧CPS当副业。 前两天&#xff0c;抖音开放平台团队发布公告&#xff1a; 近期&#xff0c;在微短剧类小程序内容合规排查中&am…

【LeetCode】HOT 100(11)

题单介绍&#xff1a; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数据结构的新手和想要在短时间内高效提升的人&#xff0c;熟练掌握这 100 道题&#xff0c;你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

工作多年的工作焦虑症-广泛性焦虑症

我相信工作多年的人都会有自己的工作焦虑症的情况&#xff0c;而我们普通人最多的最容易的也就是广泛性焦虑症&#xff0c;广泛性焦虑障碍&#xff08;GAD&#xff09;是一种常见的慢性焦虑障碍&#xff0c;患者长时间处于一种担心、紧张、无法放松的状态。它会让一种广泛的担心…