普通人学习rust——从零到放弃 变量、不可变量、常量
普通人学习rust——从零到放弃 变量、不可变量、常量
环境
本文章内容基于如下环境,如若出入请参考当前环境。
rustc 1.42.0 (b8cedc004 2020-03-09)
cargo 1.42.0 (86334295e 2020-01-31)
前言
可变变量、不可变量、常量 是rust语言的一个特性。本篇文章主要讲rust的三个关键字:let
、mut
、const
不可变量
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——从零到放弃 变量、不可变量、常量的更多相关文章
- 普通人学习rust——从零到放弃 简单输入输出
普通人学习rust--从零到放弃 简单输入输出 环境 本文章内容基于如下环境,如若出入请参考当前环境. rustc 1.42.0 (b8cedc004 2020-03-09) cargo 1.42.0 ...
- 零基础学习前端1-1配置node及npm环境变量
零基础学习前端1-1配置node及npm环境变量 ## 1-1配置node及npm环境变量 首先:下载node 可以直接去官方网站下载 1.首先从官网下载安装包 https://nodejs.org/ ...
- 用欧拉计划学习Rust编程(第13~16题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
- OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建
# OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-hom ...
- 通过欧拉计划学习Rust编程(第22~25题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
- 020 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 14 变量与常量 知识总结
020 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 14 变量与常量 知识总结 本文知识点:变量与常量 知识总结 Java中的标识符 Java中的关键字 目前常 ...
- 011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三—— 变量值——即Java中的“字面值”
011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三-- 变量值--即Java中的"字面值" 变量值可以是 ...
- 学习Rust第一天 Rust语言特点
学习Rust之前,我觉得应该首先了解Rust语言的设计目的是什么?为什么会诞生这门语言?这门语言和其他的语言有什么不同. Rust语言的设计特点 高性能:rust拥有和C++相近的性能表现,所以在嵌入 ...
- Java 学习第一步-JDK安装和Java环境变量配置
Java学习第一步——JDK安装及Java环境变量配置 [原文] 2014-05-30 9:09 Java SE 阿超 9046 views Java作为当下很主流的编程语言,学习Java的朋 ...
随机推荐
- fiddler https 您的连接不是私密连接 解决方法(不明原理但是照着做成功了,记录下)
在桌面找到生成的证书 打开chrome chrome://settings/ 导入证书 再次运行fiddler,依次点击Tools下的Options,然后点HTTPS选项卡,再点击actions下的R ...
- maven工程根项目运行ok但是子项目就报错的解决办法
正常启动没错 项目出现问题 maven工程根项目运行ok但是子项目就报错 报错信息是xxxx没有创建 解决办法 原来是子项目的依赖少了 没有配置1.8 所以会出现莫明其妙的bug
- web压测工具http_load
1.什么是http_loadhttp_load是一款基于Linux平台的web服务器性能测试工具,用于测试web服务器的吞吐量与负载,web页面的性能. 2.http_load的安装1)下载地址:ht ...
- 如何用js判断一个对象是不是Array
.如何用js判断一个对象是不是Array 1.Array.isArray(obj) 调用数组的isArray方法 2.obj instanceof Array 判断对象是否是Array的实例 3.Ob ...
- 点击一个ul的五个li元素,分别弹出他们的序号,怎么做?
方法1 : for(var i=0; i<oLis.length; i++){ oLis[i].onclick = (function(j){ return function(){ alert( ...
- 严谨与特色并行——WSDM 2015大会见闻记
2015大会见闻记" title="严谨与特色并行--WSDM 2015大会见闻记"> 第8届ACM网络搜索与数据挖掘会议(ACM International Co ...
- WTF is The BlockChain?
最近区块链大热,走到哪儿都有人在讨论区块链和比特币,甚至于一些对密码学完全没有概念的人都开始大肆吹捧,不免让人嗤之以鼻.相信很多技术和非技术的朋友都希望能够更深层次地去了解它是如何工作的.本文将用不到 ...
- HINOC2.0标准介绍(1):概述
本文首发于'瀚诺观察'微信公众号 摘要: 2016年3月18日,国家新闻出版广电总局批准发布了行业标准GY/T 297-2016<NGB宽带接入系统HINOC2.0物理层和媒体接入控制层技术规范 ...
- HTML笔记02
网页中的颜色有三种表示方法 颜色单词:blue.green.red.yellow 10进制表示:rgb(255,0,0).rgb(0,255,0).rgb(0,0,255) 16进制表示:#ff000 ...
- C++走向远洋——42(项目二,我的数组类,深复制,构造函数)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...