Time: 20190921

基本编程概念

Rust的学习曲线相对陡峭,更好的学习方式是先把概念理清楚,形成相对宏观的认知后,再动手实践,和一般的语言学习方式略有不同。

具体说就是,会涉及到Rust语言的以下概念:

  • 变量
  • 基本类型
  • 函数
  • 注释
  • 控制流

变量与可变性

默认情况下,变量是不可变的,如果想让变量显式可变,则用mut关键字修饰即可。

那我们一定想问,这么设计的目的是什么?有什么好处吗》》

fn main() {let x = 5;println!("x的值是:{}", x);x = 6;println!("x的值是:{}", x);
}

这种代码,VSCode编译器会直接报红,不用等到执行时就知道错了。但是通过这个例子,我们可以读一读编译器给出的信息。

error[E0384]: cannot assign twice to immutable variable `x`--> src/main.rs:4:5|
2 |     let x = 5;|         -|         ||         first assignment to `x`|         help: make this binding mutable: `mut x`
3 |     println!("x的值是:{}", x);
4 |     x = 6;|     ^^^^^ cannot assign twice to immutable variableerror: aborting due to previous error

Rust的编译报错信息非常细致,这也是实践中提高代码能力的一种方式。

变量 vs. 常量

不能改变变量的值,很自然会让我们联想到另一个概念:常量

区别在哪里呢?

在Rust语言里,也有const关键字修饰变量,表示的是常量。

第一个区别是,常量不允许添加mut改变为变量。

const MAX_POINTS: u32 = 100_000;

常量声明无需let

Rust人性化的地方还在于这些小细节,数字之间插入下划线并不影响定义,只是为了增加可读性。

官方就说了这些,暂时先就说这么多吧。

Shadowing

这个不是很清楚中文是如何翻译,从意思上来看,表示遮盖,定义新的同名变量可以覆盖前面的同名变量。

fn main() {let x = 5;let x = x + 1;let x = x * 2;println!("x的值是:{}", x); // 12
}

这种做法是定义新的变量,和将变量修饰为mut,再修改变量的值的做法是不同的。

定义新的变量比mut限制少一些,比如下面这种:

let spaces = "    ";
let spaces = spaces.len(); // ok

如果是定义mut,下面的代码是会报错的:

let mut spaces = "    ";
spaces = spaces.len(); // 类型不匹配

即,先行推断类型已经确定,后面再改时,也需要是相同类型的数据。

2019.10 Update:

第一届PAT算法直播课培训班招募帖,欢迎点击查看详情、

END.

Rust常用编程概念之变量和可变性相关推荐

  1. Rust学习入门(2):Rust通用的编程概念

    文章目录 通用的编程概念 变量与可变性 数据类型 标量类型 复合类型 函数和注释 控制流(if else) 控制流 (循环) 参考链接 通用的编程概念 变量与可变性 声明变量使用let关键字,默认情况 ...

  2. 【拔刀吧少年】之shell编程规范与变量

    shell编程规范与变量 一.Shell脚本概述 1.shell脚本的概念 2.shell脚本应用场景 3.shell的作用--命令翻译器,"翻译官"(`又称命令的组合`) 二.用 ...

  3. muduo学习笔记 - 第3章 多线程服务器的适合场合与常用编程模型

    第3章 多线程服务器的适合场合与常用编程模型 3.1 基本概念 同步和异步 针对程序和内核的交互 同步:用户进程触发IO操作,等待或轮询的查看IO是否就绪 异步:用户进程触发IO操作,继续做自己的事情 ...

  4. shell脚本详解(一)——Shell编程规范与变量

    详解Shell编程规范与变量 一.Shell脚本概述 1.shell脚本的概念 2.shell脚本应用场景 3.shell的作用--命令翻译器,"翻译官" 二.用户的登录shell ...

  5. Tensorflow一些常用基本概念与函数

    参考文献 Tensorflow一些常用基本概念与函数 http://www.cnblogs.com/wuzhitj/archive/2017/03.html Tensorflow笔记:常用函数说明: ...

  6. Rust FFI 编程--理解不同语言的数据类型转换

    1. 简介 "FFI"是" Foreign Function Interface"的缩写,大意为不同编程语言所写程序间的相互调用.鉴于C语言事实上是编程语言界的 ...

  7. rust异步编程--理解并发/多线程/回调/异步/future/promise/async/await/tokio

    1. 异步编程简介 通常我们将消息通信分成同步和异步两种: 同步就是消息的发送方要等待消息返回才能继续处理其它事情 异步就是消息的发送方不需要等待消息返回就可以处理其它事情 很显然异步允许我们同时做更 ...

  8. 为什么说 Rust 是编程的未来?

    作者 | Scalac 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 2020年 Stack Overflow 的调查报告显示,Rust 名列最受欢迎编程语言的榜首,86% 的开发人员 ...

  9. 【正点原子Linux连载】第一章 应用编程概念-摘自【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

最新文章

  1. 985博导给学生改论文,第一篇心态就崩了!
  2. window.event
  3. Loadrunner在post请求的cookie中插入其它多个值
  4. Pearson收购PowerSchool iPod播教育内容
  5. 实现灵活的IT架构的三个要点
  6. php服务模块在nginx中的安装失败,在已安装的nginx中添加模块
  7. javac参数 编译警告关闭_JVM之JIT即时编译
  8. kettle组件-应用
  9. maven teavm-idea-artifacts: Command execution failed.: Process exited with an error: 1 Exit value: 1
  10. python爬取12306_详解python 爬取12306验证码
  11. Python Miller Rabin 米勒-拉宾素性检验
  12. cdr 表格自动填充文字_【Excel技巧】excel单元格自动填充英文字母编号
  13. 【算法应用】Thompson Sampling--汤普森采样应用之代码篇 (Python)
  14. 002 splitter
  15. 坚果Pro 电源键失效的处理
  16. 典型相关分析、对应分析
  17. 2022山东大学控制科学与工程学院研究生新生学业奖学金评奖排序细则
  18. centos:centos7.3镜像下载
  19. 软件的官方源、二进制地址
  20. 东莞群控服务器系统,群控服务器远程连接工具

热门文章

  1. pytorch---之torch.manual_seed()
  2. Markdown-Latex全称量词和存在量词(对于全体、存在)
  3. 圆投影匹配算法描述及实现
  4. java web 21_JavaWeb——day21
  5. linux下syslog命令,syslog命令
  6. java中sql 语句格式转换_Java字符串转Sql语句In格式工具方法
  7. python 人工智能课程对孩子的好处_少儿编程有什么好处?儿童编程课程学习Python的4大原因...
  8. python有什么证可以考1002python有什么证可以考_离python二级考还有十几天,吓的我赶紧买了本python教程...
  9. 威联通_万兆加持!威联通QNAP TS-932X,首次入手威联通NAS简单体验
  10. python输出隔4个字符_python怎么实现每隔几个字符分割