变量

  • 变量默认是不可变的
  • 不能使用没有初始化的变量

作用域

变量离开作用域之后会直接释放, 无法再次使用; 在内部代码块中定义的变量会导致外部的变量被遮蔽

类型转换

部分类型可以隐式转换, 部分类型需要使用 as 手动显式转换

    let num_u32 = 100u32;
let num_i64 = num_u32 as i64;

From和Into

实现对应的接口可以方便进行类型转换.

From和Into的函数接口是自动推断和相互转换的, 所以, 只需要实现From接口的from函数即可

struct Number {
value: i32,
} impl From<i32> for Number {
fn from(value: i32) -> Self {
Number { value }
}
} fn main() {
let number: Number = 42.into();
println!("The number is {}", number.value);
}

TryFrom和TryInto

当进行类型转换的时候, 可能出现类型不能转换的情况, 这个时候会抛出异常, 异常需要被处理, 所以, 应该使用 Result 作为返回值被接受

impl TryFrom<i32> for EvenNumber {
type Error = (); fn try_from(value: i32) -> Result<Self, Self::Error> {
if value % 2 == 0 {
Ok(EvenNumber(value))
} else {
Err(())
}
}
}

to_string和from_string

实现了 Display 的接口之后的默认也是实现了 to_string 的方法

变量传递

使用 & 传递变量的引用

类型推断

根据变量如何使用和变量初始化时候的赋值自动推断

表达式计算变量

可以在 {} 中编写表达式, 计算出来的结果会被赋值给变量

fn main() {
let x = 5u32; let y = {
let x_squared = x * x;
let x_cube = x_squared * x; // 将此表达式赋给 `y`
x_cube + x_squared + x
}; let z = {
// 分号结束了这个表达式,于是将 `()` 赋给 `z`
2 * x;
}; println!("x is {:?}", x);
println!("y is {:?}", y);
println!("z is {:?}", z);
}

这里的最后一个语句是一个表达式, 而不是完整的代码语句, 并且不能携带 ; , 不然会被赋值为 ()

rust学习笔记(3)的更多相关文章

  1. Rust学习笔记1

    这是一份不错的rust教程,目前包括4个block和4个project.全部完成后可以用rust实现一个简单的key-value存储引擎. 注意:Windows下rust貌似会遇到一些bug,强烈建议 ...

  2. Rust学习笔记一 数据类型

    写在前面 我也不是什么特别厉害的大牛,学历也很低,只是对一些新语言比较感兴趣,接触过的语言不算多也不算少,大部分也都浅尝辄止,所以理解上可能会有一些偏差. 自学了Java.Kotlin.Python. ...

  3. Rust学习笔记2

    继续继续... 转眼都开学啦... Building Blocks 2 building blocks里讲了一些关于Log structure storage的东西,这也是用于在硬盘上持久化KvSto ...

  4. Rust学习之旅(读书笔记):枚举 (Enum)

    Rust学习之旅(读书笔记):枚举 (Enum) C 语言的枚举类型很弱,不如后来的语言,也不如之前的语言.在 C 语言里面枚举量就是一个名字,更方便的定义常量.今天读了<The Rust Pr ...

  5. 《Rust权威指南》学习笔记——4. 认识所有权

    Rust权威指南学习笔记--认识所有权 什么是所有权 1. 所有权规则 Rust中的每一个值都有一个对应的变量作为它的所有者. 在同一时间内,值有且仅有一个所有者. 当所有者离开自己的作用域时,它持有 ...

  6. Rust 学习之旅(7):Package,Crate,Module

    Rust 学习之旅(7):Package,Crate,Module 这是第 7 章的读书笔记,Cargo Workspace 在第 14 章. Packages and Crates As a pro ...

  7. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  8. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  9. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  10. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

随机推荐

  1. Ubuntu 22.04 LTS 代号已经公布:那就是 Jammy Jellyfish

    Ubuntu 22.04 LTS 代号已在 Ubuntu 开发之家 Launchpad 上公布. 在字母系列中的字母"I"之后,是"J". 因此,Canonic ...

  2. File was changed on disk

    刚开始从eclipse转到idea,发现idea从svn同步代码后,点开一个java类报错 说是某个方法不存在,以为是别人代码没有提全,就点到别人代码里面去看,顶行出现"File was c ...

  3. Qt音视频开发11-通用监控布局控件(开源)

    一.前言 自从做监控系统以来,就一直有打算将这个功能独立出来一个类,这样的话很多系统用到此类布局切换,通用这个类就行,而且后期此布局会增加其他异形布局,甚至按照16:9之类的比例生成布局,之前此功能直 ...

  4. Qt编写物联网管理平台42-数据查询导出打印

    一.前言 本系统存储的三大类记录,运行日志.报警日志.用户日志,这些不同类似的记录,都需要提供查询功能,可以按照记录的时间范围等条件查询,查询的记录需要做分页显示,为了分页显示还特意花了很多时间专门封 ...

  5. Qt编写可视化大屏电子看板系统26-模块4模具进度

    一.前言 模具进度主要用来展示不同的模具类别加工进度,表格的形式展示,显示内容包括模具编号.版本号.类型.状态.产品名称.计划交期.当前进度,其中进度条采用自定义控件三态进度条,有三种状态显示进度:右 ...

  6. Qt编写地图综合应用53-省市轮廓图下载

    一.前言 Qt的浏览器控件的交互机制非常方便,所以在在线地图的时候可以对每个区域的经纬度坐标集合发给Qt程序,让他去存储到文件,在实际的测试过程中,发现有部分地图有多个封闭的曲线的,比如散落的岛屿和飞 ...

  7. Windows下的GDAL环境配置

    Windows下的GDAL环境配置 在Windows下GDAL环境的配置方式有很多种,我尝试了很多不同的配置方式,包括Anaconda. GISInternals.QGIS.OSGeo4W等, 我这里 ...

  8. 探索Python @dataclass的内部原理

    之前写过一篇介绍Python中dataclass的文章:<掌握python的dataclass,让你的代码更简洁优雅>. 那篇侧重于介绍dataclass的使用,今天想探索一下这个有趣的特 ...

  9. RockyLinux9编译安装MySQL8

    Linux版本: Rocky Linux release 9.5 (Blue Onyx) 1.下载 打开MySQL-Community-Server官方下载页面:https://downloads.m ...

  10. AI时代云动力:新一代弹性计算云主机开启智能计算新纪元!

    随着信息技术的飞速发展,云计算在企业数字化转型中发挥着愈发重要的作用. 弹性计算作为云计算技术的重要组成部分,以灵活的资源分配.高可用性等优势,在数字化转型中扮演着举足轻重的角色. 为打造更加卓越的上 ...