关键词:
0x0
每种编程语言都有变量的概念,我们可以把变量理解为最简单的存储方式,它是编码过程中是必不可少的。
Rust的变量很有特色。变量不可变的特性让人想起了Erlang。以及后面的模式匹配,我觉得作者应该受Erlang影响很大。
下面主要介绍一下Rust中变量的几个特性。
- 不可变
- 让变量可变
- 变量与常量的区别
- 隐藏/覆盖
0x1 不可变(immutable)
Rust怎么使用变量呢?
let x = 5;
和其他语言很像,但是变量不能在生命周期内再做如下操作了
x = 6;
这样的话会通不过编译,这就是变量不可变的特性。
为什么要这么做呢?说一下我的理解。
这个特性可以规避掉很多问题,比如一些常见的低级逻辑错误。
更重要的是,这个特性会影响到多线程并发编程。变量不再可变,就不存在临界资源问题,也就不需要引入锁,这会影响到使用者对并发模型的选择和设计。(不评价这种特性的好坏,毕竟这是语言的特性,选择了它就要接受它)。
0x2 让变量可变
如果你熟练使用其他语言的话,会很不适应变量不可变的这种设定。当然了,作者并没有把路堵死,他还留下了一个关键字 -- mut。
let mut x = 5;
x = 6;
mut让变量可变成为了可能。
不过,如果没有必要,我是不推荐使用这个关键字的。它为了便捷而破坏了Rust的设计原则,让代码变得不再安全可控。
0x3 变量与常量的区别
到这里,恐怕有些同学已经提出疑问了,const不香吗?
Rust也支持const,这个关键字用来定义常量。真正的不可变。
const和let这两个关键字的区别是什么?
- const不能和mut组合使用
- const必须写明值的类型
- const可以定义在任何作用域
const只能被初始化为常量表达式,不能是函数调用的结构,也不能是运行时才计算出来的结果
const MAX_POINTS: u32 = 100;
说一下我的理解
const应该是个语法糖,它在编译期被解释为和let一样的特性。所以它不能接收运行时计算的结果。
0x4 隐藏/覆盖(Shadowing)
let x = 5;
let x = x + 1;
let x = x * 2;
使用let关键字,可以覆盖之前同名的变量。以上表达式得到的结果是12
当你迫切的想修改一个变量,这个变量又没有使用关键字mut时,可以用let覆盖上一次的变量。
它的本质是创建一个新变量。所以可以任意修改变量的类型,而mut是不能修改类型的。
let spaces = " ";
let spaces = spaces.len();
let mut spaces = " ";
spaces = spaces.len();
前两句代码是可以编译通过的,后两句不行。
0x5 总结
记住三个关键字
- let 定义变量,覆盖变量
- mut 让变量可变
- const 常量
rust学习--变量(代码片段)
0x0每种编程语言都有变量的概念,我们可以把变量理解为最简单的存储方式,它是编码过程中是必不可少的。Rust的变量很有特色。变量不可变的特性让人想起了Erlang。以及后面的模式匹配,我觉得作者应该受Erlang影响很大。下... 查看详情
rust学习笔记-变量和类型(代码片段)
变量通常一门的语言的变量是没有啥可以说道的,无法就是变量命名规则:以字母、下划线和数字组成,并且数字不能开头,没啥好说的。但rust的变量奇怪的地方是,变量不可变譬如这样一个简单到不能再简... 查看详情
rust学习-result/option/unwrap/?(代码片段)
学习Rust时,注意到有4个概念经常放到一起讨论:Result、Option、unwapr和?操作符。本文记录了我对这4个Rust概念的思考,这个思考过程帮助我理解并学会了如何写出更地道的Rust代码。1、Option-可空变量虽然Rust中有null的... 查看详情
rust学习教程-引用与借用(代码片段)
...t语言圣经>>一书欢迎大家加入Rust编程学院,一起学习交流:QQ群:1009730433引用与借用上节中提到,如果仅仅是所有权转移,会让程序变得复杂,那能否像其它编程语言一样,使用某个变量的指针或者引... 查看详情
rust学习(代码片段)
Rust 1.install 2.playonline curlhttps://sh.rustup.rs-sSf|shecho‘PATH="$PATH:$HOME/.cargo/bin"‘>>~/.bashrcrustupdoc Tutorialorglearn (entry) 查看详情
rust学习1(代码片段)
1.为什么学习rust官网的解释如下,性能好,可靠,生产力。我的理由,想看看怎么保证内存安全与线程安全的 1.环境搭建去网站下载对应的rustup-init https://forge.rust-lang.org/infra/other-installation-methods.html然后按照操作... 查看详情
rust语言圣经07-变量绑定与解构(代码片段)
...ariable.html 欢迎大家加入Rust编程学院,中国最好的Rust学习社区官网:https://college.rsQQ群:1009730433变量绑定与解构本节在内容上部分参考了RustBook鉴于本书的目标读者已经熟练掌握其它任意一门编程语言,因此这里... 查看详情
rust学习笔记1.基础语法(代码片段)
文章目录Rust的基本语法0、猜字游戏1、Cargo是什么2、输出字符串3、基础语法赋值重影4、Rust的数据类型5、Rust的注释6、Rust的函数函数体的语句和表达式函数返回值7、条件语句8、循环语句9、所有权Rust的所有权内存的分配变量与... 查看详情
rust变量的可变性(代码片段)
变量与可变性在rust中声明的变量默认是不可变的。fnmain()letx=5;println!("Thevalueofxis:x");x=6;println!("Thevalueofxis:x");保存并使用cargorun运行程序,可以看到如下提示:$cargorunCompilingvariablesv0.1.0(f 查看详情
rust学习教程26-特征对象(代码片段)
...t语言圣经>>一书欢迎大家加入Rust编程学院,一起学习交流:QQ群:1009730433特征对象在上一节中有一段代码无法通过编译:fnreturns_summarizable(switch:bool)->implSummaryifswitchPost//...elseWeibo//...其中Post和Weibo都实现了 查看详情
rust学习教程26-特征对象(代码片段)
...t语言圣经>>一书欢迎大家加入Rust编程学院,一起学习交流:QQ群:1009730433特征对象在上一节中有一段代码无法通过编译:fnreturns_summarizable(switch:bool)->implSummaryifswitchPost//...elseWeibo//...其中Post和Weibo都实现了 查看详情
rust学习教程14-函数(代码片段)
...t语言圣经>>一书欢迎大家加入Rust编程学院,一起学习交流:QQ群:1009730433函数Rust的函数我们在之前已经见过不少,跟其他语言几乎没有什么区别。因此本章的学习之路将轻松和愉快,骚年们,请珍惜这种... 查看详情
rust学习教程14-函数(代码片段)
...t语言圣经>>一书欢迎大家加入Rust编程学院,一起学习交流:QQ群:1009730433函数Rust的函数我们在之前已经见过不少,跟其他语言几乎没有什么区别。因此本章的学习之路将轻松和愉快,骚年们,请珍惜这种... 查看详情
rust学习教程28-深入类型转换(代码片段)
...t语言圣经>>一书欢迎大家加入Rust编程学院,一起学习交流:QQ群:1009730433类型转换Rust是类型安全的语言,因此在Rust中做类型转换不是一件简单的事,这一章节我们将对Rust中的类型转换进行详尽讲解。as转换先... 查看详情
rust机器学习的现状(代码片段)
...我想简要介绍一下我所看到的事情的历史,以及有关机器学习/深度学习框架的现有变化以及最近的主要趋势的一些信息。BRIEFHISTORYANDWHEREAREWENOW?现有的ML/DL生态系统非常庞大,因为它们是高性能计算、数学优化、系统和编译器工... 查看详情
rust学习教程21-option和模式匹配(代码片段)
...t语言圣经>>一书欢迎大家加入Rust编程学院,一起学习交流:QQ群:1009730433解构Option在枚举那一章,提到过Option枚举变量是用来解决Rust中一个变量是否有值的问题,定义如下:enumOption<T>Some(T),None,总而言之... 查看详情
rust通用编程概念(代码片段)
通用编程概念变量、基本类型、函数、控制流变量与可变性rust中的变量默认是不可变的,这样是为了能够让你安全并且方便地写出复杂、甚至并行的代码。当一个变量是不可变时,一旦它绑定到了某个值上面,这个值就再也无... 查看详情
rust学习教程27-深入了解特征(代码片段)
...t语言圣经>>一书欢迎大家加入Rust编程学院,一起学习交流:QQ群:1009730433深入了解特征特征之于Rust更甚于接口之于其他语言,因此特征在Rust中很重要也相对较为复杂,我们决定把特征分为两篇进行介绍,... 查看详情