4.通用编程概念

news2024/11/20 6:26:32

目录

  • 一、变量与常量
    • 1.1 变量
    • 1.2 常量
  • 二、遮蔽
  • 三、数据类型
    • 3.1 标量类型
      • 1. 整型
      • 2. 浮点型
      • 3. 布尔类型
      • 4.字符类型
    • 3.2 复合类型
      • 1. 元组
      • 2. 数组
  • 四、函数
  • 五、语句和表达式
  • 六、函数的返回值

一、变量与常量

1.1 变量

      在Rust中默认的变量是不可变的,如果修改其值会导致错误。

fn main(){
    let x = 3;
    x = 5;  //error[E0384]: cannot assign twice to immutable variable `x`
}

定义变量时添加mut关键字就能解决以上问题,例如let mut x = 3

1.2 常量

  1. 常量必须使用const定义,且类型必须被标注。
  2. 常量可以在任何作用域内进行声明,包括全局作用域。
  3. 常量只可以绑定到常量表达式
  4. 常量使用全大写字母,每个单词之间用下划线分隔
  5. 数字可以用_分隔,以增加可读性
const MAX_POINTS:u32  100_000;

二、遮蔽

在Rust中,可以定义不同类型/相同类型的相同变量而不会报错,例如

fn main(){
    let x = 3;
    let x = x + 5;  //同为i32类型的x
    let x = String::from("Hello");  //将x设置为String类型
    println!("{}", x);
}

三、数据类型

      Rust是一门静态类型语言,在编译期内就必须知道变量的类型,因此将一个字符型的整数转换成真正的整数型时,就必须显式的定义类型。

fn main(){
    let x  = "42".parse().expect("Not a number"); 
    //let x:u32  = "42".parse().expect("Not a number"); 这是正确的
    println!("{}", x);
}

通过下面的报错信息可以很明显的知道应该如何修改源码
在这里插入图片描述

3.1 标量类型

      Rust有四种基本的标量类型:整型、浮点型、布尔型以及字符型

1. 整型

      下表展示的Rust语言中的整型,后面的数字代表了所示用的位数,isize 和 usize 类型取决于程序运行的计算机体系结构。

长度有符号类型无符号类型
8 位i8u8
16 位i16u16
32 位i32u32
64 位i64u64
128位i128u128
archisizeusize

也可以按照下表中所示的任意形式来表示整型的字面量

数字字面量示例
十进制98_222
十六进制0xff
八进制0o77
二进制0b1111_0000
字节 (仅限于 u8)b’A’

整型溢出的问题

      u8可以存放0~255的值,如果存放256则会发生整型溢出,在调试模式(debug)下编译,Rust会检查溢出,在发布模式(release)下构建时,Rust对于溢出的处理时采用取余的方式循环。比如在 u8 的情况下,256 变成 0,257 变成 1。
      要显式处理溢出的可能性,可以使用标准库针对原始数字类型提供的以下一系列方法:

  • 使用 wrapping_* 方法在所有模式下进行循环,例如 wrapping_add
  • 如果使用 checked_* 方法时发生溢出,则返回 None 值
  • 使用overflowing_*方法返回该值和一个指示是否存在溢出的布尔值
  • 使用 saturating_* 方法使值达到最小值或最大值

2. 浮点型

      在 Rust 中浮点型数字也有两种基本是 f32 和 f64,它们的大小分别为 32 位和 64 位。默认浮点类型是 f64,浮点型都是有符号的。

fn main(){
    let x = 83.1;       //f64
    let y:f32 = 83.1;   //f32
}

3. 布尔类型

      Rust 中的布尔类型有两个可能的值:true 和 false。布尔值的大小为 1 个字节。Rust 中的布尔类型可以使用 bool进行显式的声明。

fn main() {
    let t = true;
    let f: bool = false; // 显式声明为布尔型
}

4.字符类型

      字符类型字面量用单引号引起来,Rust 的字符类型大小为 4 个字节,表示的是一个 Unicode 标量值,这意味着它可以表示的远远不止是 ASCII。标音字母,中文/日文/韩文的文字,emoji,还有零宽空格(zero width space)在 Rust 中都是合法的字符类型。

fn main() {
    let c = 'z';
    let z = 'ℤ';
    let heart_eyed_cat = '😻';
}

3.2 复合类型

      Rust有两种复合类型:元组(tuple)和数组(array)。

1. 元组

      将多种类型的多个值组合到一个复合类型中的一种基本方式,元组的长度是固定的。

fn main(){
    let tup = (500, 30.1, "China");  //默认的类型创建元组

    let tup2:(i64, f32, bool) = (35, 34.1, true);  //显式创建元组

    let (x, y, z) = tup2; //将tup2中的三个值分别赋给x,y,z

    println!("{} {} {}", x, y, z); //访问tup2的方式1
    println!("{} {} {}", tup2.0, tup2.1, tup2.2) //访问tup2的方式1
}

2. 数组

数组的每个元素的元素类型必须相同,且数据的长度固定。

fn main(){
    let a = [1, 2, 3, 4, 5]; //定义默认i32的5个元素的数组,组内元素为1~5
    let b: [i64; 5] = [1, 2, 3, 4, 5]; //定义i64型的5个元素的数组,组内元素为1~5
    let c = [3; 5];   //长度为5,元组全为3,即相当于[3, 3, 3, 3, 3]

    for item in c{
        println!("item = {}", item) //循环输出c内的元素
    }

    println!("a[0] = {}", a[0]);   //单个访问
}

四、函数

Rust的函数以fn关键字开头,函数和变量名中所有字母都是小写并使用下划线分隔单词,函数参数必须指明类型。

fn another_function(x: i32, source: &str){
    println!("x = {}, source = {}", x, source);
}
	
fn main(){
    another_function(32, "China");
}

五、语句和表达式

  • 函数的函数体由一系列语句组成,也可以表达式结尾。
  • 语句是执行一些操作但不返回值的指令。表达式(expression)计算并产生一个值。
fn main(){
    // let x = (let y = 6); //语句不返回值,因此bool得不到初始值
    let x = {
        let  y = 6;
        y + 1    //不能加分号结尾,加分号后就成了语句
    };  //{}整体是表达式,返回值是y+1=7

    println!("x = {}", x);
}

六、函数的返回值

  • rust并不对返回值命令,以->声明返回值的类型。
  • rust中的函数返回值等于最后一个表达式的值。
  • 使用return x可以提前返回

fn get_return_value(x: i32) -> i32 {
    if x < 0{
        return -1;
    }

    x
}

fn main() {
    let x = get_return_value(-1);
    let y = get_return_value(10);

    println!("{}, {}", x,y);  //-1, 10
}

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

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

相关文章

汽车EDI——Volvo EDI 项目案例

项目背景 作为Volvo的长期合作伙伴&#xff0c;C公司收到Volvo的EDI对接邀请&#xff0c;需要实现EDI对接。C公司将会面临哪些挑战&#xff1f;又应该相应地选择何种EDI解决方案呢&#xff1f; 汽车行业强调供需双方的高效协同&#xff08;比如研发设计、生产计划、物流信息等…

BIOS主板(非UEFI)安装fedora40的方法

BIOS主板(非UEFI)安装fedora40的方法 现实困难&#xff1a;将Fedora-Workstation-Live-x86_64-40-1.14.iso写入U盘制作成可启动U盘启动fedora40&#xff0c;按照向导将fedora40安装到真机的sda7分区中得到报错如下内容&#xff1a; Failed to find a suitable stage1 device: E…

最大矩形问题

柱状图中最大的矩形 题目 分析 矩形的面积等于宽乘以高&#xff0c;因此只要能确定每个矩形的宽和高&#xff0c;就能计算它的面积。如果直方图中一个矩形从下标为 i 的柱子开始&#xff0c;到下标为 j 的柱子结束&#xff0c;那么这两根柱子之间的矩形&#xff08;含两端的柱…

论文敲公式敲到“崩溃”?合合信息扫描全能王“公式识别”一键解决公式提取难题

毕业季临近&#xff0c;全国高校毕业生陆续进入了忙碌的“答辩季”。进入“百米冲刺”阶段&#xff0c;论文至关重要。对于理科工学生而言&#xff0c;论文中的数理化公式&#xff0c;稍不注意就容易输错&#xff0c;手动输入误差难以避免。 近日&#xff0c;合合信息旗下扫描…

【C++课程学习】:C++入门(函数重载)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f308;函数重载&#xff1a; &#x1f349;1.参数个数不同&#xff1a; &#x1f349;2.参数…

【计算机视觉(9)】

基于Python的OpenCV基础入门——形态学操作 形态学操作腐蚀膨胀开运算闭运算梯度运算顶帽黑帽 形态学操作代码实现以及效果图 形态学操作 形态学操作是数字图像处理中的一种方法&#xff0c;用于改变和提取图像中的结构和形状信息。它基于图像的形状和大小特征&#xff0c;通过…

【Framework系列】Excel转Json,配置表、导表工具介绍

今天来介绍一下Framework系列的配置部分&#xff0c;这一部分归属于Framework-Design之中。读过《Framework系列介绍》的小伙伴应该了解整个Framework框架是由多个工程项目组成&#xff0c;没看过的小伙伴可以点击链接了解一下。 Framework-Design设计的初衷是给策划同学用的&a…

为Android组件化项目搭建Maven私服

概览 文章目录 概览前言搭建 maven 私服服务器环境jdk安装配置nexus安装配置管理创建存储点、仓库 项目中使用 maven 私服上传 module 到仓库自动发布 module手动上传单个aar包 引用仓库中的 modulebuild.gradle引入远程module FAQ开发阶段有些module用远程依赖&#xff0c;有些…

苹果警告部分 iPhone 用户称他们遭到雇佣间谍软件攻击

苹果警告部分 iPhone 用户称他们遭到“雇佣间谍软件攻击 苹果正在提醒用户注意针对 iPhone 的新一轮已识别雇佣间谍软件攻击。可能的受害者已经收到来自苹果的电子邮件&#xff0c;其中描述了该攻击如何“远程破坏 iPhone”。据路透社报道&#xff0c;印度和其他 91 个国家的受…

内容产品运营方案业务架构解析与实践探索

### 背景 在信息爆炸的时代背景下&#xff0c;内容产品运营成为各行各业竞争的重要环节。构建合理的内容产品运营方案业务架构&#xff0c;能够帮助企业更好地管理内容生产、推广和变现&#xff0c;提升品牌影响力和商业价值。 ### 业务架构设计 #### 1. 内容生产与管理 建立…

一套java开发的(未来工厂核心MES系统成品源码)技术架构:java+springboot 支撑多端管理,可商用

MES定义为“位于上层的计划管理系统与底层的工业控制之间的面向车间层的管理信息系统” 20世纪90年代初期&#xff0c;中国就开始对MES以及ERP的跟踪研究、告知或试点&#xff0c;而且曾经发言 “管控一体化”&#xff0c;“人、财、物、产、供、销”等颇具中国独具一格的CIMS、…

input组件 type为nickname pc端获取不到这个绑定的值?

一、input组件 type为nickname pc端获取不到这个绑定的值&#xff1f; 在pc端 使用input blur 事件获取选择昵称结果失败 代码如下&#xff1a; <input type"nickname" bindblur"binname" name"nickName" placeholder"请输入昵称"…

2024年政治经济学与社会科学国际会议(ICPESS 2024)

2024年政治经济学与社会科学国际会议 2024 International Conference on Political Economy and Social Sciences 会议简介 2024年政治经济学与社会科学国际会议是一个致力于探讨政治经济学与社会科学交叉领域前沿问题的国际盛会。本次会议汇聚了全球顶尖的专家学者、研究人员和…

传统产品经理AI产品经理

前言 随着科技的发展&#xff0c;技术的革新&#xff0c;AI技术当今已经渗入到各个行业里边&#xff0c;身处其中的产品经理也面临的新的挑战和机遇&#xff0c;下面是笔者整理分享的关于传统的产品经理如何顺应时代发展&#xff0c;成功转换成AI产品经理的相关内容&#xff0…

vcruntime140.dll干嘛的?丢失了vcruntime140.dll要咋办?

vcruntime140.dll干嘛的&#xff1f;vcruntime140.dll就是一个dll文件&#xff0c;它对于很多程序都是有用的&#xff0c;如果没有了它&#xff0c;那么你的有些程序是打不开的&#xff01;所以当你丢失的时候&#xff0c;你就要想办法去修复vcruntime140.dll文件&#xff0c;假…

那个会用AI绘画的设计师,刚刚加薪了!不会AI的打工人却只能被优化?

大家好&#xff0c;我是向阳。 随着ChatGPT引领人工智能的热潮&#xff0c;AI绘画也悄然崭露头角&#xff01; 插画师、建筑师、平面设计师等艺术创作领域的从业者&#xff0c;感受到了前所未有的压力 当一个设计师能有多难&#xff1f; 设计师需要在&#xff1a;主管/经理…

SQL面试问题集

目录 Q.左连接和右连接的区别 Q.union 和 union all的区别 1、取结果的交集 2、获取结果后的操作 Q.熟悉开窗函数吗&#xff1f;讲一下row_number和dense_rank的区别。 Q.hive行转列怎么操作的 Q.要求手写的题主要考了聚合函数和窗口函数&#xff0c;row_number()&#…

(2024,ViT,小波变换,图像标记器,稀疏张量)基于小波的 ViT 图像标记器

Wavelet-Based Image Tokenizer for Vision Transformers 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0 摘要 1 引言 3 基于小波的图像压缩简介 4 图像标记器 4.1 像素空间标记嵌…

【Python机器学习】主成分分析(PCA)

主成分分析&#xff08;PCA&#xff09;是一种旋转数据集的方法&#xff0c;旋转后的数特征在统计上不相关。在做完这种旋转之后&#xff0c;通常是根据新特征对解释数据的重要性来选择它的一个子集。 举例&#xff1a; import mglearn.plots import matplotlib.pyplot as pl…

AWS S3存储桶中如何下载文件

AWS S3存储桶中如何下载文件 1.单个下载 AWS S3 控制台提供了下载单个文件的功能&#xff0c;但是不支持直接在控制台中进行批量下载文件。您可以通过以下步骤在 AWS S3 控制台上下载单个文件&#xff1a;   1.1登录 AWS 管理控制台。   1.2转到 S3 服务页面。   1.3单击…