普通人学习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的朋 ...
随机推荐
- com.mysql.jdbc.exceptions.jdbc4.MySQLDataException: '2.34435678977654336E17' in column '3' is outside valid range for the datatype INTEGER.
### Error querying database. Cause: java.lang.reflect.UndeclaredThrowableException### The error may ...
- python Django请求生命周期
首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串. 在Django中,当我们访问一个的url时,会通过路由匹配进入相应的html网页中. Django的请求生命周期是指当用户在浏览器上输 ...
- 吴裕雄--天生自然python编程:turtle模块绘图(2)
#彩色螺旋线 import turtle import time turtle.pensize(2) turtle.bgcolor("black") colors = [" ...
- 吴裕雄--天生自然KITTEN编程:小猫解题
作品链接:https://ide.codemao.cn/we/36447034
- JAVA中对list map根据map某个key值进行排序
package test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; ...
- 函数节流throttle和防抖debounce
throttle 函数节流 不论触发函数多少次,函数只在设定条件到达时调用第一次函数设定,函数节流 1234567891011 let throttle = function(fn,intervalT ...
- JSON parse error: Cannot deserialize value of type `java.util.Date` from String
DateTimePicker + @DateTimeFormat("yyyy-MM-dd HH:mm:ss")日期格式转换异常 最近在做的一个项目使用的日期格式是yyyy-MM-d ...
- C++与引用2
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- AF(操作者框架)系列(3)-创建第一个Actor的程序
这节课的内容,语言描述基本是无趣的,就是一个纯程序编写,直接上图了. 如果想做其他练习,可参考前面的文章: https://zhuanlan.zhihu.com/p/105133597 1. 新建一个 ...
- 手机浏览器自动播放视频video(设置autoplay无效)的解决方案
1.问题的提出 某一天接了个需求,需要在手机的H5页面内加入视频,我开开心心做完,准备交付的时候,问题来了,PM想要用户一进入页面,视频就开始播放,不需要用户手动点击. 2.尝试解决 加autopla ...