rust学习--变量(代码片段)

zhroot zhroot     2023-04-17     478

关键词:

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中很重要也相对较为复杂,我们决定把特征分为两篇进行介绍,... 查看详情