Rust入门4——基本编程概念

文章目录

    • 1. 变量与可变性
    • 2. 数据类型:标量类型
    • 3. 数据类型:复合类型
    • 4. 函数和注释

1. 变量与可变性

声明变量使用let关键字
默认情况下,变量是不可变的
声明变量时,在let后加上mut关键字,就可以使变量可变

常量在绑定值后也不可变,但是和上面提到的变量有很多区别

  • 不可以使用mut,永远不可变
  • 声明使用const关键字,并且类型必须被标注
  • 可在任何作用域内被声明
  • 只能绑定到常量表达式,无法绑定到函数的调用结果或只能在运行时才能算出的值

隐藏shadowing

  • 可以使用相同的名字声明新的变量,新的变量会隐藏掉之前声明的同名变量
  • 使用let声明的同名新变量,它的类型可以与之前不同(比如之前是int,现在是string)

2. 数据类型:标量类型

数据类型有两个大类,一类是标量类型,一类是复合类型

基于使用的值,Rust编译器通常能够推断出它的具体类型。
但如果可能的类型比较多,例如把string转为整数的parse方法,就必须添加相应的标注,否则编译报错

一个标量类型代表一个单个的值,Rust中一共有4种主要的标量类型

  • 整数类型:比如u32,无符号整数,占32位。u代表无符号,i代表有符号。
    • Rust中的整数类型有i8,u8,i16,u16,i32,u32一直到128位
  • 浮点类型:f32,32位单精度浮点类型,f64,64位双精度浮点类型(默认类型)
  • 布尔类型:两种布尔类型true和false,一个字节,符号是bool
  • 字符类型:char类型,占4字节,单引号,单个字符

3. 数据类型:复合类型

Rust中提供了两种基本的复合类型:Tuple(元组)和数组

Tuple可以将多个类型的多个值放在一个类型里。Tuple的长度是固定的,一旦声明就无法改变

let tup: (i32,f64,u8) = (500,6.4,1);
let (x,y,z) = tup;
println!("{},{},{}",tup.0,tup.1,tup.2);
println!("{},{},{}",x,y,z);

数组:元素类型相同,且长度固定

let a = [1,2,3,4,5];
println!("{},{}",a[1],a[2]);

Rust中同样有类似c++stl中的vector

4. 函数和注释

Rust中使用fn关键字代表函数

fn main() {println!("main function!");func();
}
fn func(){println!("func execute!");
}

带参数

fn main() {println!("main function!");func(100,99);
}
fn func(x:i32,y:i32){println!("x = {}",x);println!("y = {}",y);
}

有返回值的函数

fn main() {println!("main function!");let res = func(3,4);println!("res = {}",res);
}
fn func(x:i32,y:i32) -> i32{println!("x = {}",x);println!("y = {}",y);return x + y;
}

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

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

相关文章

单片机学习笔记---DS18B20温度读取

目录 OneWire.c 模拟初始化的时序 模拟发送一位的时序 模拟接收一位的时序 模拟发送一个字节的时序 模拟接收一个字节的时序 OneWire.h DS18B20.c DS18B20数据帧 模拟温度变换的数据帧 模拟温度读取的数据帧 DS18B20.h main.c 上一篇讲了DS18B20温度传感器的工作原…

blender在几何节点中的这些变换中的旋转,其实可以是两种旋转顺序

看似xyz的旋转角度,但如果按照欧拉角来谈它的旋转,就大有学问了。 我们知道,在blender中有局部旋转和全局旋转。但其实这两者在某种情况下可以等价。 那就是,如果参照全局坐标系,按xyz的顺序进行欧拉旋转,…

Mac终端远程访问Linux

以ubuntu为例 一、查看ubuntu的ip地址 1、下载net-tools localhostubuntu-server:~$ sudo apt install net-tools 2、查看ip地址 localhostubuntu-server:~$ ifconfig ubuntu需要下载net-tools才能使用ifconfig localhostubuntu-server:~$ sudo apt install net-tools 二…

判断能否形成等差数列

1502. 判断能否形成等差数列 给你一个数字数组 arr 。 如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。 如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。 示例…

Hive调优——count distinct替换

离线数仓开发过程中经常会对数据去重后聚合统计,而对于大数据量来说,count(distinct ) 操作消耗资源且查询性能很慢,以下是调优的方式。 解决方案一:group by 替代 原sql 如下: #7日、14日的app点击的用户数&#x…

[AIGC] Kafka 的 Rebalance 机制:保证分区的可靠性和高可用性

在分布式系统中,Kafka 是一种流处理平台,具有高吞吐量、低延迟和可扩展性等特点。在 Kafka 中,消费者组是一组消费者的集合,它们共同消费一个 topic 的所有分区。在消费者组中,每个分区只能由一个消费者消费&#xff0…

MySQL 基础知识(一)之数据库和 SQL 概述

目录 1 数据库相关概念 2 数据库的结构 ​3 SQL 概要 4 SQL 的基本书写规则 1 数据库相关概念 数据库是将大量的数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合数据库管理系统(DBMS)是用来管理数据库的计算机系统&#xf…

解决‘vue‘ 不是内部或外部命令,也不是可运行的程序(设置全局变量)

发现是没有执行: npm install -g vue/cli 但是发现还是不行 此时,我们安装了 Vue CLI,但是在运行 vue ui 命令时出现了问题。这通常是因为全局安装的 Vue CLI 的路径没有被正确地添加到系统的环境变量中。 可以尝试以下几种方法来解决这个问…

C++ //练习 6.55 编写4个函数,分别对两个int值执行加、减、乘、除运算;在上一题创建的vector对象中保存指向这些函数的指针。

C Primer(第5版) 练习 6.55 练习 6.55 编写4个函数,分别对两个int值执行加、减、乘、除运算;在上一题创建的vector对象中保存指向这些函数的指针。 环境:Linux Ubuntu(云服务器) 工具&#x…

《UE5_C++多人TPS完整教程》学习笔记15 ——《P16 会话接口委托(Session Interface Delegates)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P16 会话接口委托(Session Interface Delegates)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版,UP主&#xf…

SelfAttention|自注意力机制ms简单实现

自注意力机制学习有感 观看b站博主的讲解视频以及跟着他的pytorch代码实现mindspore的自注意力机制:up主讲的很好,推荐入门自注意力机制。 import mindspore as ms import mindspore.nn as nn from mindspore import Parameter from mindspore import …

预处理详解(上)

1. 预定义符号 C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。 __FILE__ //进行编译的源文件 __LINE__ //文件当前的行号 __DATE__ //文件被编译的日期 __TIME__ //文件被编译的时间 __STDC__ //如果编译器遵循ANSIC&…

MongoDB聚合操作符:$abs

$abs聚合操作符用于返回数值的绝对值。 语法 { $abs: <数值> }<数值>表达式可以是任何能被解析为数值的合法表达式。 用法 如果$abs的<number>参数被解析为null值或引用不存在的字段&#xff0c;将返回null&#xff0c;如果参数被解析为NaN&#xff0c;也…

【力扣每日一题】力扣107二叉树的层序遍历II

题目来源 力扣107二叉树的层序遍历II 题目概述 给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历&#xff09; 思路分析 二叉树的层序遍历结果翻转即可得到答案 …

Windows11通过SMB映射NAS网络驱动磁盘

环境 NAS&#xff1a;威联通TS-416 操作系统&#xff1a;Windows11 第一步 连接NAS winr 打开运行&#xff0c;输入NAS局域网IP地址&#xff0c;按照如下的格式输入 然后输入NAS的账号和密码就可以通过SMB连接到NAS了 第二步 映射网络驱动器 举个栗子&#xff1a;右键Stora…

【数据结构】哈希桶封装出map和set

利用之前的哈希桶封装出unordered_map和unordered_set。 这个封装并不简单&#xff0c;迭代器的使用&#xff0c;模板参数的繁多&#xff0c;需要我们一层一层封装。 map是一个k - v类型&#xff0c;set是k类型&#xff0c;那么就明确了如果需要封装&#xff0c;底层的tables…

JavaScript 设计模式之桥接模式

桥接模式 通过桥接模式&#xff0c;我们可以将业务逻辑与元素的事件解耦&#xff0c;也可以更灵活的创建一些对象 倘若我们有如下代码 const dom document.getElementById(#test)// 鼠标移入移出事件 // 鼠标移入时改变背景色和字体颜色 dom.onmouseenter function() { th…

XML学习

XML学习 1 XML介绍2 XML语法3 XML特殊字符4 XML文档结构5 XML命名空间 1 XML介绍 XML是可扩展的标记性语言&#xff0c;常用来传输和存储数据。可见于Web中的web.xml和Maven中的pom.xml version是版本&#xff0c;encoding是编码 <?xml version"1.0" encodin…

嵌入式中详解 ARM 几个常见的寄存器方法

大家好&#xff0c;今天来聊聊对于ARM几个特殊寄存器的理解&#xff0c;FP、SP和LR。 1、介绍 FP&#xff1a;栈顶指针&#xff0c;指向一个栈帧的顶部&#xff0c;当函数发生跳转时&#xff0c;会记录当时的栈的起始位置。 SP&#xff1a;栈指针&#xff08;也称为栈底指针&…

深入探索Pandas读写XML文件的完整指南与实战read_xml、to_xml【第79篇—读写XML文件】

深入探索Pandas读写XML文件的完整指南与实战read_xml、to_xml XML&#xff08;eXtensible Markup Language&#xff09;是一种常见的数据交换格式&#xff0c;广泛应用于各种应用程序和领域。在数据处理中&#xff0c;Pandas是一个强大的工具&#xff0c;它提供了read_xml和to…