Rust-知多少?

文章目录

  • 前言
  • 1.使用下划线开头忽略未使用的变量
  • 2. 变量解构
  • 3.常量
  • 4.变量遮蔽(shadowing)
  • 5. 类似println!("{}", x); 为啥加感叹号
  • 6.单元类型
  • 总结


前言

Rust 学习系列,记录一些rust使用小技巧


1.使用下划线开头忽略未使用的变量

如果你创建了一个变量却不在任何地方使用它,Rust 通常会给你一个警告。这时你希望告诉 Rust 不要警告未使用的变量,为此可以用下划线作为变量名的开头:

fn main() {let _x = 5;let y = 10;
}

在线运行一下;
在这里插入图片描述
使用了下划线作为变量名开头的不会警告;

2. 变量解构

let 表达式不仅仅用于变量的绑定,还能进行复杂变量的解构.
在这里插入图片描述

3.常量

  • 常量不允许使用 mut。常量不仅仅默认不可变,而且自始至终不可变,因为常量在编译完成后,已经确定它的值。
  • 常量使用 const 关键字而不是 let 关键字来声明,并且值的类型必须标注。
  • Rust 常量的命名约定是全部字母都使用大写,并使用下划线分隔单词,另外对数字字面量可插入下划线以提高可读性

4.变量遮蔽(shadowing)

在Rust中,变量遮蔽(shadowing)和mut关键字有一些区别。

变量遮蔽是指在同一个作用域中,使用相同的名称定义一个新的变量,从而遮蔽之前定义的同名变量。这意味着新定义的变量会覆盖之前的变量,并且可以改变变量的类型。例如:

let x = 5;
let x = "hello";
println!("{}", x); // 输出 "hello"

在上面的例子中,变量x被遮蔽了两次,首先定义为整数类型,然后定义为字符串类型。每次定义都创建一个新的变量,并且新变量的作用域覆盖了之前变量的作用域。

而mut关键字用于声明一个可变变量。在使用mut声明的变量中,可以改变变量的值,但是不能改变变量的类型。例如:

let mut x = 5;
x = 10;
println!("{}", x); // 输出 "10"

在这个例子中,变量x被声明为可变变量,并且可以通过赋值语句改变它的值。但是,由于变量的类型在声明时已经确定,所以不能改变其类型。

变量遮蔽(shadowing)允许在同一个作用域内使用相同名称的变量,并且可以改变变量的类型,而mut关键字只允许改变变量的值,但不能改变变量的类型。

5. 类似println!(“{}”, x); 为啥加感叹号

在Rust中,感叹号!通常用于调用宏(macro)。println!是一个宏的示例,它可以将文本打印到标准输出。
使用感叹号的目的是告诉编译器这是一个宏调用,而不是普通函数调用。这是为了区分宏和函数,因为它们在语法和执行方式上有很大的不同。

6.单元类型

单元类型就是 () ,对,你没看错,就是 () ,唯一的值也是 () ,大家已经看到过很多次 fn main() 函数的使用吧?那么这个函数返回什么呢?

没错, main 函数就返回这个单元类型 (),你不能说 main 函数无返回值,因为没有返回值的函数在 Rust 中是有单独的定义的:发散函数( diverge function ),顾名思义,无法收敛的函数。

例如常见的 println!() 的返回值也是单元类型 ()。

再比如,你可以用 () 作为 map 的值,表示我们不关注具体的值,只关注 key。 这种用法和 Go 语言的 struct{} 类似,可以作为一个值用来占位,但是完全不占用任何内存。

这里估计也是单元类型。
在这里插入图片描述


总结

参考 :Rust 学习书籍

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

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

相关文章

MySQL跨服务器关联查询

1. 首先确认服务器的Federated引擎是否开启 show engines;修改数据库的配制文件my.ini,(我的my.ini的路径为:D:\ProgramData\MySQL\MySQL Server 5.7/my.ini),将federated添加到my.ini文件中 到MySQL的my.cnf配置文件中修改 在 [mysqld] 下方加入 federated 然后重…

通过前序和中序遍历结果构造二叉树

题目 105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode) 思路 首先思考,根节点应该做什么。 肯定要想办法确定根节点的值,把根节点做出来,然后递归构造左右子树即可。 我们先来回顾一下,前序遍历和…

全网超全的测试类型详解,再也不怕面试答不出来了!

在软件测试工作过程中或者在面试过程中经常会被问到一些看起来简单但是总是有些回答不上的问题,比如你说说“黑盒测试和白盒测试的区别?”,“你们公司做灰度测试么?", ”α测试和β测试有什么不一样?“&#xff0…

review 10

整理磁盘操作的完整流程,如何接入虚拟机,是否成功识别,对磁盘分区工具的使用,格式化,挂载以及取消挂载、复习cp、mv和find指令 1:U盘接入虚拟机 在弹出窗口直接选择 虚拟机-可移动设备-找到u盘-连接 2&a…

matlab代码--基于注水法的MIMO信道容量实现

今天接触一个简单的注水法程序,搞懂数学原理即可看懂代码。 1 注水法简介 详细原理可以参考: MIMO的信道容量以及实现 大致理论就是利用拉格朗日乘子法,求解信道容量的最大化问题,得到的解形如往水池中注水的形式,最…

过字符设备驱动分步注册过程实现LED驱动的编写,编写应用程序测试,发布到CSDN

头文件 #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t; #define PHY_LED1_ADDR 0X50006000 #define PHY_LED2_ADDR 0X50007000 #d…

信号系统之移动平均滤波器

1 通过卷积实现 移动平均滤波器的工作原理是平均输入信号中的多个点,以产生输出信号中的每个点。在方程式形式中,这样写: 其中是 x 输入信号,y 是输出信号,M 是平均值中的点数。例如,在 5 点移动平均滤波器…

基于51单片机的智能台灯的设计与实现

摘 要:针对青少年因坐姿不正确、灯光亮度不合适、用眼过度等原因易导致的近视问题,文中提出使用51单片机作为主控制单元,选用红外检测、光敏检测、蓝牙通信、蜂鸣器和模数转换等模块,设计了一款智能台灯。该智能台灯具有节能、预防近视等功能。经测试,该台灯具有保护视力的…

php基础学习之常用系统函数

一,有关输出的语句/函数 echo语句 用于输出一个或多个字符串 print语句 用于输出一个字符串(用句点连接的多个字符串本质是一个字符串),与echo类似,但返回值为1 printf()函数 用于格式化输出字符串,类似于C…

Android下SF合成流程重学习之Refresh流程

Android下SF合成流程重学习之Refresh流程 引言 在前面初步分析完成了Android下SF合成流程重学习之Invalidate流程,我们接下来继续下面的分析。当有事务的更新或者有Buffer的更新便会触发后面刷新的流程,即Refresh流程! 一. onMessageRefresh 文件&…

QT串口通讯上位机_基础串口通讯

目录 1. 实现目标1.1 界面1.2 发送1.3 接收1.4 清除接收、发送 2. 新建工程3. 添加头文件4. 变量定义5. 完整代码6. 工程下载 1. 实现目标 1.1 界面 1.2 发送 1.3 接收 1.4 清除接收、发送 2. 新建工程 3. 添加头文件 QT serialport // #include <QDebug‘’> #incl…

数据库架构师之道:MySQL安装与系统整合指南

目录 MySQL数据库安装&#xff08;centos&#xff09; 版本选择 企业版 社区版 选哪个 MySQL特点 MySQL服务端-客户端 mysql下载选择 软件包解释 安装MySQL的方式 rpm包安装 yum方式安装 源码编译安装★ 具体的编译安装步骤★★ 环境准备 free -m命令 cat /pr…

OpenAI超级视频模型Sora登上央视,LeCun强推的「世界模型」雏形相继诞生,AGI如何能够以人类的理解方式看世界?

OpenAI超级视频模型Sora热度不减 Sora一经面世&#xff0c;瞬间成为顶流&#xff0c;话题热度只增不减&#xff0c;一度登上央视新闻报道。 强大的逼真视频生成能力&#xff0c;让许多人纷纷惊呼「现实不存在了」。 OpenAI官方技术报告 OpenAI官方Sora技术报告&#xff1a;V…

JMeter 配置元件之按条件读取CSV Data Set Config

实践环境 win10 JMeter 5.4.1 需求描述 需求是这样的&#xff0c;需要压测某个接口(取消分配接口)&#xff0c;请求这个接口之前&#xff0c;需要先登录系统(物流WMS系统)&#xff0c;并在登录后&#xff0c;选择并进入需要操作的仓库&#xff0c;然后请求接口&#xff0c;…

我的NPI项目之Android Camera (二) -- 核心部件之 Camera Sensor

说到Camera模组&#xff0c;我们比较关心的是用的什么样的sensor&#xff1f; sensor的分辨率多少&#xff0c;sensor的像素多大&#xff0c;sensor是哪家生产的等等一些问题。今天&#xff0c;我们就穿越时间&#xff0c;将sensor的历史扒一扒。 Wikipedia先看一下&#xff1…

MOSFET栅极应用电路分析汇总(驱动、加速、保护、自举等等)

概述 MOSFET是一种常见的电压型控制器件&#xff0c;具有开关速度快、高频性能、输入阻抗高、噪声小、驱动功率小、动态范围大、安全工作区域(SOA)宽等一系列的优点&#xff0c;因此被广泛的应用于开关电源、电机控制、电动工具等各行各业。栅极做为MOSFET本身较薄弱的环节&am…

【C++11新特性】详解智能指针 创建、使用、注意事项

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

小白如何学鸿蒙开发?

在互联网技术不断发展的现在&#xff0c;鸿蒙操作系统的出现标志着是能技术领域的一次重大突破&#xff0c;鸿蒙作为华为推出的一代操作系统&#xff0c;鸿蒙不仅达代表了自主创新的力量&#xff0c;还因为独特的分布式架构和全场景适配能力而备受关注。随着鸿蒙生态的不断完善…

测试架构师必备技能 —— Nginx安装部署实战

Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的免费开源Web和 反向代理服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。在高并发访问的情况下&#xff0c;Nginx是Apache服务器不错的替代品。官网数据显示每秒TPS高达50W左右。本文…

左旋字符串解析

题目 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 例如&#xff1a; ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 法1&#xff1a;一个个移动 #include<stdio.h> #include<string.h>//把一个字符串s,左移time个字符 void leftRound(char* s…