普通人学习rust——从零到放弃 变量、不可变量、常量

环境

本文章内容基于如下环境,如若出入请参考当前环境。

rustc 1.42.0 (b8cedc004 2020-03-09)
cargo 1.42.0 (86334295e 2020-01-31)

前言

可变变量、不可变量、常量 是rust语言的一个特性。本篇文章主要讲rust的三个关键字:letmutconst

不可变量

let 是创建变量的关键字,rust默认创建的变量为不可变量。吐槽:大多数情况下,程序都是使用可变变量,而rust却默认创建的不可变的变量,纯粹为了特别而特别吧!

//设置不可变量
let x = 5;
println!("let x={}",x);

不可变量不可对变量进行修改,错误示例

	//设置不可变量
let x = 5;
println!("let x={}",x);
//不可以对不可变量进行修改
x = 6;
println!("let x={}",x);

编译错误

error[E0384]: cannot assign twice to immutable variable `x`
--> main.rs:6:2
|
3 | let x = 5;
| -
| |
| first assignment to `x`
| help: make this binding mutable: `mut x`
...
6 | x = 6;
| ^^^^^ cannot assign twice to immutable variable error: aborting due to previous error For more information about this error, try `rustc --explain E0384`.

不可变量可以重新定义,重新定义包括改变类型

正确示例

	//设置不可变量
let x = 5;
println!("let x={}",x);
//重新定义
let x = 6;
println!("let x={}",x);
//重新定义,并改变类型
let x = "字符串";
println!("let x={}",x);

运行结果

let x=5
let x=6
let x=字符串

可变变量

绝大多数情况下,程序都是定义为可以修改的变量,变量本来就是要变的,只是rust加了一层不可变而已。rust下需要加上mut才能使变量可以修改。

正确示例

	//设置可变量
let mut x = 5;
println!("let x={}",x);
//修改值
x = 6;
println!("let x={}",x);

运行结果

let x=5
let x=6

修改值需要保持类型一致,错误示例

	//设置不可变量
let mut x = 5;
println!("let x={}",x);
//修改值
x = "字符串";
println!("let x={}",x);

编译错误

error[E0308]: mismatched types
--> main.rs:6:6
|
6 | x = "字符串";
| ^^^^^^^^ expected integer, found `&str` error: aborting due to previous error For more information about this error, try `rustc --explain E0308`.

常量

定义常量使用const作为关键字。

	//设置常量
const PI:f32 = 3.14;
println!("const PI={}",PI);

运行结果

const PI=3.14

常量不可修改,这跟不可变量是一样的

常量不可重新定义,错误示例1

fn main(){
//设置常量
const PI:f32 = 3.14;
println!("const PI={}",PI);
const PI:f32 = 3.1415;
println!("const PI={}",PI);
}

编译错误

error[E0428]: the name `PI` is defined multiple times
--> main.rs:5:2
|
3 | const PI:f32 = 3.14;
| -------------------- previous definition of the value `PI` here
4 | println!("const PI={}",PI);
5 | const PI:f32 = 3.1415;
| ^^^^^^^^^^^^^^^^^^^^^^ `PI` redefined here
|
= note: `PI` must be defined only once in the value namespace of this block error: aborting due to previous error For more information about this error, try `rustc --explain E0428`.

错误示例2

//设置常量
const PI:f32 = 3.14;
println!("const PI={}",PI);
let PI:f32 = 3.1415;
println!("let PI={}",PI);

编译错误

warning: floating-point types cannot be used in patterns
--> main.rs:5:6
|
5 | let PI:f32 = 3.1415;
| ^^
|
= note: `#[warn(illegal_floating_point_literal_pattern)]` on by default
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #41620 <https://github.com/rust-lang/rust/issues/41620> error[E0005]: refutable pattern in local binding: `_` not covered
--> main.rs:5:6
|
3 | const PI:f32 = 3.14;
| -------------------- constant defined here
4 | println!("const PI={}",PI);
5 | let PI:f32 = 3.1415;
| ^^
| |
| interpreted as a constant pattern, not a new variable
| help: introduce a variable instead: `pi_var` warning: floating-point types cannot be used in patterns
--> main.rs:5:6
|
5 | let PI:f32 = 3.1415;
| ^^
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #41620 <https://github.com/rust-lang/rust/issues/41620> error: aborting due to previous error For more information about this error, try `rustc --explain E0005`.

常量不能推导类型需要确定类型,必须明确类型。吐槽:推导类型应该不难吧,纯粹就是为了瘸一班的感觉!

错误示例

//设置常量
const PI = 3.14;
println!("const PI={}",PI);

编译错误

error: missing type for `const` item
--> main.rs:3:11
|
3 | const PI = 3.14;
| ^^ help: provide a type for the item: `PI: f64` error: aborting due to previous error

常量可以在函数外部定义,而可变量和不可变量不可以。

正确示例

//设置常量
const PI:f32 = 3.14;
fn main(){
println!("const PI={}",PI);
}

运行结果

const PI=3.14

错误示例

//设置
let PI:f32 = 3.14;
fn main(){
println!("const PI={}",PI);
}

编译错误

error: expected item, found keyword `let`
--> main.rs:2:1
|
2 | let PI:f32 = 3.14;
| ^^^ expected item error: aborting due to previous error

总结

rust分为可变变量、不可变变量、常量,默认创建的变量为不可变量。

普通人学习rust——从零到放弃 变量、不可变量、常量的更多相关文章

  1. 普通人学习rust——从零到放弃 简单输入输出

    普通人学习rust--从零到放弃 简单输入输出 环境 本文章内容基于如下环境,如若出入请参考当前环境. rustc 1.42.0 (b8cedc004 2020-03-09) cargo 1.42.0 ...

  2. 零基础学习前端1-1配置node及npm环境变量

    零基础学习前端1-1配置node及npm环境变量 ## 1-1配置node及npm环境变量 首先:下载node 可以直接去官方网站下载 1.首先从官网下载安装包 https://nodejs.org/ ...

  3. 用欧拉计划学习Rust编程(第13~16题)

    最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...

  4. OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建

    # OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-hom ...

  5. 通过欧拉计划学习Rust编程(第22~25题)

    最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...

  6. 020 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 14 变量与常量 知识总结

    020 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 14 变量与常量 知识总结 本文知识点:变量与常量 知识总结 Java中的标识符 Java中的关键字 目前常 ...

  7. 011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三—— 变量值——即Java中的“字面值”

    011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三-- 变量值--即Java中的"字面值" 变量值可以是 ...

  8. 学习Rust第一天 Rust语言特点

    学习Rust之前,我觉得应该首先了解Rust语言的设计目的是什么?为什么会诞生这门语言?这门语言和其他的语言有什么不同. Rust语言的设计特点 高性能:rust拥有和C++相近的性能表现,所以在嵌入 ...

  9. Java 学习第一步-JDK安装和Java环境变量配置

    Java学习第一步——JDK安装及Java环境变量配置 [原文]  2014-05-30 9:09  Java SE  阿超  9046 views Java作为当下很主流的编程语言,学习Java的朋 ...

随机推荐

  1. 安装python3.5

    安装python3.5可能使用的依赖 [root@heweiwei heweiwei]# yum install openssl-devel bzip2-devel expat-devel gdbm- ...

  2. connect() failed (111: Connection refused) while connecting to upstream报错处理

    新lnmp环境调试项目时,nginx报错如下: 解决: 发现php-fpm.conf是以套接字方式通信,而nginx是以端口方式通信,见下图: 将nginx.conf修改为如下,重新reload即可

  3. mailx发邮件报错Error initializing NSS: Unknown error -8015. . . . message not sent.处理

    前提:在配置zabbix3.0监控发送邮件告警时zabbix界面显示邮件以送达,但是QQ邮箱却没有收到邮件,再shell命令行测试发邮件QQ邮箱又是可以收到的,在别人的提醒下用zabbix用户执行发送 ...

  4. Data Visualization and D3.js 笔记(1)

    课程地址: https://classroom.udacity.com/courses/ud507 什么是数据可视化? 高效传达一个故事/概念,探索数据的pattern 通过颜色.尺寸.形式在视觉上表 ...

  5. centos上安装python环境

    1.安装python-pip ​ 首先安装epel扩展源: ​ yum -y install epel-release ​ 更新完成之后,安装pip: ​ yum -y install python- ...

  6. NSURLSession与NSURLConnection区别

    1. 使用现状      NSURLSession是NSURLConnection 的替代者,在2013年苹果全球开发者大会(WWDC2013)随ios7一起发布,是对NSURLConnection进 ...

  7. Uber刷单,刷出中国的人性劣根?

         美国叫车应用Uber国际化之路一直挺顺利的,融资也挺顺利的,他们现在很有钱,最新总融资金额达到100亿美元,创下美国非上市高科技公司的融资纪录.全新的商业模式,以及优质的客户体验,让Uber ...

  8. HTC新机A9足以取代iPhone 你相信吗?

    你相信吗?" title="HTC新机A9足以取代iPhone 你相信吗?"> 自信和嘴硬之间,往往就是成功与失败的分水岭.乔老爷子当年推出iPhone.iPad等 ...

  9. 对话|首席研究员童欣:从长远看,AR的应用范围远比VR广泛

    ​童欣博士现任微软亚洲研究院网络图形组首席研究员.1993年毕业于浙江大学计算机系,获工学学士学位:1996年获浙江大学计算机系硕士学位:1999年获清华大学计算机系博士学位,同年加入微软亚洲研究院. ...

  10. Git私服搭建

    Git私服搭建 一.Git服务器搭建方式 GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通信? Git支持的四种通信协议: Local(本地协议) ...