2023-11-Rust

学习方案:Rust程序设计指南

1、变量和可变性

声明变量:let 变量、const 常量

rust 默认变量一旦声明,就不可变(immutable)。当想改变 加 mut(mutable) 。

const 不允许用mut ,只能声明常量,单词全部大写下划线连接。

let特点:

可多次声明,多次声明隐蔽性、默认不可变。

mut 和隐蔽的区别:

隐蔽实际创建一个新的变量,可以改变值得类型,并复用变量名。而mut 修改值时不能转换值得类型

2、rust类型

标量 scalar:

rust有四种标量类型:整数、浮点型、bool、字符型

整型:长度为 8-128bit、arch(isize、usize)、有符号 ixxx 、无符号u***

有符号和无符号代表数字是否可为负值(有符号数)、

或永远为正(无符号数)、

isize和usize 类型依赖运行程序的计算机架构,64系统为64,32系统为32

rust 默认使用 i32 。

整形溢出:

debug模式:程序panic

release模式:二进制补码,超过最大值绕会最小值

浮点型: f32  f64 默认 f64 。32单精度,64双精度。

字符类型 char:

单引号 声明char 字面量

双引号声明 字符串字面量

复合类型 compound:

rust有两个原生的复合类型:tuple 、array  

tuple 元祖:一旦声明,长度不可变。每个位置类型可不同,可以结构,可以使用点访问索引  

数组:长度固定,类型一致, 

声明12个长度 类型为i32的数组:let x :[i32;12]=[]

创建x个值为y的数组 let arr = [x;y];

访问元素:【index】,索引超出数组时panic

函数:

函数名变量名 snake case 风格;小写下划线分割,函数签名提供参数类型。

语句和表达式

语句:不返回值,

表达式:计算产生一个值

表达式可以用变量接收,语句不能用变量接收。

rust 函数也是语句

2、所有权

及scope 作用域:

栈:

堆:

Sting:

指针:0x1111

长度:当前String使用多少字节内存,

容量:String从分配器总共获取多少字节内容。 

栈:出作用域自动调用 drop函数

堆:存在指针拷贝。可能存在重复drop,二次释放【bug】造成内存污染,安全隐患。

解决:指针拷贝后,rust认为指针一不再有效,

 let str = String::from("hello world");let str1 = str;println!("str is {str}")

【 str  value borrowed here  after move  】

js: 深拷贝、浅拷贝。

rust: move 移动

rust 深拷贝的方式 clone,重新拷贝了一份堆中数据。

【js 和 rust 关于堆数据多次引用的关系区别】:

js:多个指针指向同一个堆中数据

rust:当多个指针指向同一个堆中数据,只有最后一个指针有效,之前的全部失效,无法访问

包括 函数的实参传递。

fn test2(){let str = String::from("hello world");test3(str);println!("str is {str}") // str value borrowed after move
}fn test3(str:String){}

rust变量:栈中copy 

 let x = 111;let y = x;println!("x is {x}")  //111

弊端:不获取所有权就无法对堆数据进行访问,引出:

【reference  引用 &】

引用与指针:

引用确保指向某个堆数据的有效指针。

移动:

引用:

fn test2(){let str = String::from("hello world");test3(&str);println!("str is {str}") // hello world
}fn test3(str:&String){}

tip:

函数使用引用值作为参数,无需交换所有权,因为未曾拥有过。

将创建一个引用的行为成为借用【borrowing】,使用权而不是拥有权和处置权。

所以无法修改借用来的变量:

  fn test3(str:&String){str.push_str("8888") ;}
// error:  cannot borrow `*str` as mutable, as it is behind a `&` reference

引用同变量一样,默认不允许修改。

引出: 可变引用:

fn test2(){let str = String::from("hello world");test3(&mut str);println!("str is {str}") // hello world
}fn test3(str:&mut String){}

限制:

只能对同一个变量使用一次可变引用,因为无法清除以哪个结果为准,数据在运行时难以追踪,类式:同时append和remove同一个dom。

【数据竞争】:多个指针同时访问并异步同一数据源

在同时使用可变与不可变引用是也是类式的规则。

let str = String::from("hello world");let str1 = &str;let str2 = &mut str1; // cannot borrow `str1` as mutable, as it is not declared as mutable

一个引用的作用域从声明的地方一直持续到最后一次使用为止,如果最后一个使用不可变引用发生在可变引用之前,那么是可以的:

 let mut str = String::from("hello world");let str1 = &str;let str2 = &mut str;//error:cannot borrow `str` as mutable because it is also borrowed as immutableprintln!("str1 is {str1}");let str2 = &mut str;//ok

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

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

相关文章

【黑马程序员】SpringCloud——Eureka

文章目录 前言一、提供者与消费者1. 服务调用关系 二、远程调用的问题三、eureka 原理分析1. eureka 的作用 四、Eureka 案例1. 搭建 eureka 服务1. 服务注册1.1 注册 user-service1.2 启动 user-service3. order-service 完成服务注册 3. 服务发现1. 在 order-service 完成服务…

算术运算符、自增自减运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符

1.算术运算符 public class OperatorDemo1 {public static void main(String[] args) {int a 10;int b 2;System.out.println(a b);System.out.println(a - b);System.out.println(a * b);System.out.println(a / b);System.out.println(5 / 2);System.out.println(5.0 / 2);…

element-ui中el-table数据合并行和列,应该怎么解决

最近接到一个任务,要实现一个数据报表,涉及到很多合并问题,一开始想着原生会简单点,实际上很麻烦,最后还是用elemen-ui中table自带的合并方法. 最终的效果是要做成这种:1.数据处理,后端返回来的数据是,一个大对象,包含三个数组,既然合并,肯定是要处理成一个数组,并且要把相同的…

户外台灯设计:照亮你的户外空间

在一个温暖的夏夜,能够在户外享受美味的晚餐是一种特殊的愉悦。这种露天用餐的体验不仅让你感受大自然的美丽,还提供了独特的放松感。为了让这个时刻更加难忘,户外台灯的用途与设计至关重要。 户外台灯能够创造出温馨的氛围,为用餐…

Excel中功能区的存放位置很灵活,可以根据需要隐藏或显示

在这个简短的教程中,你将找到5种快速简单的方法来恢复Excel功能区,以防丢失,并学习如何隐藏功能区,为工作表腾出更多空间。 功能区是Excel中所有操作的中心点,也是大多数可用功能和命令所在的区域。你觉得功能区占用了你太多的屏幕空间吗?没问题,只需单击鼠标,它就被隐…

使用python批量修改图片名称

一、使用场景 修改模式:原图片名称.png 》 目标图片名称.png条件:目标图片名称 包含 原图片名称准备工作:目标图片名称填写在excel当中,把excel放进图片文件夹内 二、代码示例 import os import pandas as pd import numpy as …

矢量图形编辑软件Boxy SVG mac中文版软件特点

Boxy SVG mac是一款基于Web的矢量图形编辑器,它提供了一系列强大的工具和功能,可帮助用户创建精美的矢量图形。Boxy SVG是一款好用的软件,并且可以在Windows、Mac和Linux系统上运行。 Boxy SVG mac软件特点 简单易用:Boxy SVG的用…

NVM安装node后提示没有对应npm包(即:无法将“npm”项识别为 cmdlet、函数、脚本文件)

背景 windows11 node版本降低到v12.22.12后,执行:nvm -v npm -v npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果 包括路径,请确保路径正确,然后再试一次。 所在位置 …

opencv dnn模块 示例(22) 目标检测 object_detection 之 yolov7

在YOLOv6 初版出来不久,YOLOv7就立马横空出世了。与YOLOv5、YOLOv6不同,YOLOv7是由YOLOv4团队的原班人马提出的(官方出品)。从论文的表上来看,目前YOLOv7无论是在实时性还是准确率上都已经超过了当时已知的所有目标检测…

Java 之 IO/NIO/OKIO

BIO blocking io AIO Asynchronous IO 从内存读取到写入--输出 从外部到内存 -- 输入 OutputStream //文件不存在则自动创建 try {OutputStream outputStream new FileOutputStream("text.txt");outputStream.write(a);outputStream.write(b);} catch (IOExcep…

Python使用Numba装饰器进行加速

Python使用Numba装饰器进行加速 前言前提条件相关介绍实验环境Numba装饰器进行加速未加速的代码输出结果 numba.jit加速的代码输出结果 前言 由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容,可点击进入Python日常小操作专栏、Ope…

已解决:Rust Error: the trait bound is not satisfied 问题

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂&#x1f996…

python的format函数的用法及实例

目录 1.format函数的语法及用法 (1)语法:{}.format() (2)用法:用于格式化字符串。可以接受无限个参数,可以指定顺序。返回结果为字符串。 2.实例 (1)不设置位置&…

煤矿企业如何选择合适的设备健康管理系统

在煤矿开采的过程中,机电设备发挥着重要的作用。但大量的机电设备的使用也给煤矿企业设备管理提出了一定的要求。随着工业领域数字化的深入应用,煤矿机电设备的自动化、智能化管理已经成为煤矿企业发展的重要手段。保障机电设备的正常运行,减…

Spring Boot框架配置WebSocket【一遍过,不过你评论骂我】

【找了无数的文档资料总结】 【不停的找文档试】 【每一次都显示连接不上】 【终于成了……】 当使用Spring Boot框架配置WebSocket时, 通常会使用@ServerEndpoint注解来标识WebSocket端点, 并通过ServerEndpointExporter来注册这些端点。以下是配置WebSocket的步骤: 步骤…

2023.11.10联测总结

T 1 T1 T1求的是有多少个区间的异或和是 k k k的因子, n , k ≤ 1 0 5 n,k \leq 10^5 n,k≤105。 这道题用前缀和维护一下,暴力枚举所有区间就有 80 80 80分。 有一瞬间想过枚举因数,但是脑抽以为要 O ( n ) \mathcal O(n) O(n)枚举&#x…

传输层中的TCP和UPD协议

一)应用层协议简介:根据需求明确要传输的信息,明确要传输的数据格式; 应用层协议:这个协议,实际上是和程序员打交道最多的协议了 1)其它四层都是操作系统,驱动,硬件实现好了的,咱们是不需要管 2)应用层:当我…

红海云签约和兆服饰,科技引领服饰行业人力资源数字化转型

和兆服饰从事多品牌多品类经营管理,旗下拥有POLOSPORT、POLOKIDS、CARTELO等国际品牌。作为一个主打POLO文化的服饰品牌,诞生于美国的POLOSPORT拥有现代感的产品设计、系列化的产品搭配、全方位的服务,是最具美国马球精神的休闲时尚服饰品牌之…

基于JavaWeb+SSM+Vue微信小程序校园兼职任务平台系统的设计和实现

基于JavaWebSSMVue微信小程序校园兼职任务平台系统的设计和实现 源码传送入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 随着社会的发展和全球疫情的冲击,大学生的就业形势越来越严峻。越…

WordPress Modown 6.2付费下载资源/付费查看内容 wp主题模板+erphpdown11.7

模板简介: 自适应响应式设计,兼容主流浏览器 网格样式与瀑布流样式任意切换 内置SEO优化 自带与主题UI完美兼容搭配的erphpdown前端用户中心页面(此功能若单独找我们定制也需要几百) 收费付费下载资源、付费查看内容、付费观看…