Rust常用编程概念之变量和可变性
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常用编程概念之变量和可变性相关推荐
- Rust学习入门(2):Rust通用的编程概念
文章目录 通用的编程概念 变量与可变性 数据类型 标量类型 复合类型 函数和注释 控制流(if else) 控制流 (循环) 参考链接 通用的编程概念 变量与可变性 声明变量使用let关键字,默认情况 ...
- 【拔刀吧少年】之shell编程规范与变量
shell编程规范与变量 一.Shell脚本概述 1.shell脚本的概念 2.shell脚本应用场景 3.shell的作用--命令翻译器,"翻译官"(`又称命令的组合`) 二.用 ...
- muduo学习笔记 - 第3章 多线程服务器的适合场合与常用编程模型
第3章 多线程服务器的适合场合与常用编程模型 3.1 基本概念 同步和异步 针对程序和内核的交互 同步:用户进程触发IO操作,等待或轮询的查看IO是否就绪 异步:用户进程触发IO操作,继续做自己的事情 ...
- shell脚本详解(一)——Shell编程规范与变量
详解Shell编程规范与变量 一.Shell脚本概述 1.shell脚本的概念 2.shell脚本应用场景 3.shell的作用--命令翻译器,"翻译官" 二.用户的登录shell ...
- Tensorflow一些常用基本概念与函数
参考文献 Tensorflow一些常用基本概念与函数 http://www.cnblogs.com/wuzhitj/archive/2017/03.html Tensorflow笔记:常用函数说明: ...
- Rust FFI 编程--理解不同语言的数据类型转换
1. 简介 "FFI"是" Foreign Function Interface"的缩写,大意为不同编程语言所写程序间的相互调用.鉴于C语言事实上是编程语言界的 ...
- rust异步编程--理解并发/多线程/回调/异步/future/promise/async/await/tokio
1. 异步编程简介 通常我们将消息通信分成同步和异步两种: 同步就是消息的发送方要等待消息返回才能继续处理其它事情 异步就是消息的发送方不需要等待消息返回就可以处理其它事情 很显然异步允许我们同时做更 ...
- 为什么说 Rust 是编程的未来?
作者 | Scalac 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 2020年 Stack Overflow 的调查报告显示,Rust 名列最受欢迎编程语言的榜首,86% 的开发人员 ...
- 【正点原子Linux连载】第一章 应用编程概念-摘自【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
最新文章
- 985博导给学生改论文,第一篇心态就崩了!
- window.event
- Loadrunner在post请求的cookie中插入其它多个值
- Pearson收购PowerSchool iPod播教育内容
- 实现灵活的IT架构的三个要点
- php服务模块在nginx中的安装失败,在已安装的nginx中添加模块
- javac参数 编译警告关闭_JVM之JIT即时编译
- kettle组件-应用
- maven teavm-idea-artifacts: Command execution failed.: Process exited with an error: 1 Exit value: 1
- python爬取12306_详解python 爬取12306验证码
- Python Miller Rabin 米勒-拉宾素性检验
- cdr 表格自动填充文字_【Excel技巧】excel单元格自动填充英文字母编号
- 【算法应用】Thompson Sampling--汤普森采样应用之代码篇 (Python)
- 002 splitter
- 坚果Pro 电源键失效的处理
- 典型相关分析、对应分析
- 2022山东大学控制科学与工程学院研究生新生学业奖学金评奖排序细则
- centos:centos7.3镜像下载
- 软件的官方源、二进制地址
- 东莞群控服务器系统,群控服务器远程连接工具
热门文章
- pytorch---之torch.manual_seed()
- Markdown-Latex全称量词和存在量词(对于全体、存在)
- 圆投影匹配算法描述及实现
- java web 21_JavaWeb——day21
- linux下syslog命令,syslog命令
- java中sql 语句格式转换_Java字符串转Sql语句In格式工具方法
- python 人工智能课程对孩子的好处_少儿编程有什么好处?儿童编程课程学习Python的4大原因...
- python有什么证可以考1002python有什么证可以考_离python二级考还有十几天,吓的我赶紧买了本python教程...
- 威联通_万兆加持!威联通QNAP TS-932X,首次入手威联通NAS简单体验
- python输出隔4个字符_python怎么实现每隔几个字符分割