Rust 基础语法

变量,基本类型,函数,注释和控制流,这些几乎是每种编程语言都具有的编程概念。

这些基础概念将存在于每个 Rust 程序中,及早学习它们将使你以最快的速度学习 Rust 的使用。

变量

首先必须说明,Rust 是强类型语言,但具有自动判断变量类型的能力。这很容易让人与弱类型语言产生混淆。

如果要声明变量,需要使用 let 关键字。例如:

let a = 123;

只学习过 JavaScript 的开发者对这句话很敏感,只学习过 C 语言的开发者对这句话很不理解。

在这句声明语句之后,以下三行代码都是被禁止的:

a = "abc";

a = 4.56;

a = 456;

第一行的错误在于当声明 a 是 123 以后,a 就被确定为整型数字,不能把字符串类型的值赋给它。

第二行的错误在于自动转换数字精度有损失,Rust 语言不允许精度有损失的自动数据类型转换。

第三行的错误在于 a 不是个可变变量。

前两种错误很容易理解,但第三个是什么意思?难道 a 不是个变量吗?

这就牵扯到了 Rust 语言为了高并发安全而做的设计:在语言层面尽量少的让变量的值可以改变。所以 a 的值不可变。但这不意味着 a 不是"变量"(英文中的 variable),官方文档称 a 这种变量为"不可变变量"。

如果我们编写的程序的一部分在假设值永远不会改变的情况下运行,而我们代码的另一部分在改变该值,那么代码的第一部分可能就不会按照设计的意图去运转。由于这种原因造成的错误很难在事后找到。这是 Rust 语言设计这种机制的原因。

当然,使变量变得"可变"(mutable)只需一个 mut 关键字。

let mut a = 123;

a = 456;

这个程序是正确的。

常量与不可变变量的区别

既然不可变变量是不可变的,那不就是常量吗?为什么叫变量?

变量和常量还是有区别的。在 Rust 中,以下程序是合法的:

let a = 123;

let a = 456;

但是如果 a 是常量就不合法:

const a: i32 = 123;

let a = 456;

变量的值可以"重新绑定",但在"重新绑定"以前不能私自被改变,这样可以确保在每一次"绑定"之后的区域里编译器可以充分的推理程序逻辑。

虽然 Rust 有自动判断类型的功能,但有些情况下声明类型更加方便:

let a: u64 = 123;

这里声明了 a 为无符号 64 位整型变量,如果没有声明类型,a 将自动被判断为有符号 32 位整型变量,这对于 a 的取值范围有很大的影响。

重影(Shadowing)

重影的概念与其他面向对象语言里的"重写"(Override)或"重载"(Overload)是不一样的。重影就是刚才讲述的所谓"重新绑定",之所以加引号就是为了在没有介绍这个概念的时候代替一下概念。

重影就是指变量的名称可以被重新使用的机制:

实例

fn main() {

let x = 5;

let x = x + 1;

let x = x * 2;

println!("The value of x is: {}", x);

}

这段程序的运行结果:

The value of x is: 12

重影与可变变量的赋值不是一个概念,重影是指用同一个名字重新代表另一个变量实体,其类型、可变属性和值都可以变化。但可变变量赋值仅能发生值的变化。

let mut s = "123";

s = s.len();

这段程序会出错:不能给字符串变量赋整型值。

rust的矿坑_Rust 基础语法相关推荐

  1. rust的矿坑_Rust入坑指南:鳞次栉比

    很久没有挖Rust的坑啦,今天来挖一些排列整齐的坑.没错,就是要介绍一些集合类型的数据类型."鳞次栉比"这个标题是不是显得很有文化? 在Rust入坑指南:常规套路一文中我们已经介绍 ...

  2. rust的矿坑_rust的词汇系统依旧不够良好

    感觉rust词汇中的"借用"这个词不是十分合适,因为想象力可能认为"借用"的物品通常是一种体积小于人质量轻便的东西,就像借用一本书,画面是书从一个人的手中交到了 ...

  3. Rust语言开发基础(六)基础语法

    2019独角兽企业重金招聘Python工程师标准>>> 一.变量的定义和使用 其它常见的编程语言对变量的定义通常是通过声明类型和使用关键new来创建一个变量,但Rust不是,Rust ...

  4. 从零开始的iOS开发:00 | Swift基础语法(上)

    目录 一.开发环境 二.关于Swift (一)Swift简介 (二)Swift特性 (三)结语 三.Swift基础语法 (一)编程准备 (二)Hello,world! (三)简单值 1.变量与常量 2 ...

  5. 【数据分析师-python基础】python基础语法精讲

    python基础语法精讲 1 从数字开始 1.1 理解整数.浮点数.复数几种类型对象 1.2 掌握运算及其相关的常用函数 2 变量.表达式和语句 2.1 变量作用及定义的方法 2.2 变量命名原则和习 ...

  6. FPGA(2)基础语法 -- 按键控制led(alway@语句)

    目录 1.module 文件名(端口) 2.声明关键字 3.always@语句 代码 1.module 文件名(端口)  注:这里最好养成习惯,只在文件名后面的括号中声明引脚变量,输入输出.关键字类型 ...

  7. javascript基础语法——表达式

    前面的话 一般地,关于javascript基础语法,人们听得比较多的术语是操作符和语句.但是,其实还有一个术语经常使用,却很少被提到,这就是javascript表达式(expression).本文将详 ...

  8. python列表嵌套字典取值_Python基础语法:你不得不知的几种变量类型

    (点击上方快速关注并设置为星标,一起学Python) 作者:kina_chen來源:简书 01. Python编码Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字, ...

  9. python赋值语句的一般格式为_Python 基础语法

    Python 基础语法 Python 语言与 Perl,C 和 Java 等语言有许多相似之处.但是,也存在一些差异. 在本章中我们将来学习 Python 的基础语法,让你快速学会 Python 编程 ...

最新文章

  1. 仅靠合成数据就能实现真实人脸分析!微软这项新研究告别人工标注
  2. 江苏省三级偏硬试题样卷
  3. Design Pattern Template Method C
  4. Caffe代码导读(2):LMDB简介
  5. java 正规 忽略,java-正则表达式查找变量并忽略方法
  6. WCF发布到IIS7问题的解决方案
  7. python 深copy_python中的深copy和浅copy
  8. jetty服务器原理与maven集成
  9. 8_19 比赛总结 [暑假集训]
  10. Oracle 数据库入门学习
  11. WinZip 15注册码
  12. UML之教学管理系统——4、Rational Rose画活动图
  13. 类和对象8:数值方法
  14. java: Compilation failed: internal java compiler error
  15. IE 不兼容 justify-content:space-evenly 的解决办法
  16. JDK11下J2Cache序列化器反射异常及--illegal-access解决方案
  17. 实体店数字化线上线下一体化经营转型
  18. 面对这样的网络状况我真的醉了
  19. Oracle创建表,id为自增序列
  20. 聊聊程序员的 3 个烦恼

热门文章

  1. 管理者必须卓有成效(卓有成效的管理者)
  2. QGC地面站手把手教你改——如何添加qmldir模块文件
  3. CSDN【精品专栏】第38期
  4. HMM模型——隐含马尔科夫模型【详细分析+图】
  5. 好分销微信公众号营销|微商城三级分销系统平台|微店分销软件
  6. linux平台 加载动态库dlsym返回null
  7. 直观地简单理解Tarjan算法(寻找有向图中的强连通图)
  8. python popen阻塞_python subprocess.Popen系列问题
  9. gazebo教程---使用gazebo插件
  10. 2023年柬埔寨签证申请攻略