rust abc(4): 定义变量并使用 mut 关键字

news/2024/11/20 19:38:20/

在这里插入图片描述

文章目录

    • 1. 目的
    • 2. 不可变变量 (immutable variable)
      • 2.1 含义
      • 2.2 代码实例
    • 3. 可变变量 (mutable variable)
      • 3.1 含义
      • 3.2 代码实例
    • 4. 总结

1. 目的

学习 rust 语言中变量的定义方式, 包括普通变量(immutable)、可变变量(mutable)。

本篇博客不涉及引用类型。

2. 不可变变量 (immutable variable)

2.1 含义

rust 语言中定义的变量, 默认是 immutable 类型。啥意思呢?

let a = 1;
let b:i32 = 42;

这样定义的都是 immutable 变量。immutable 指的是取值不能改变。其实可以理解为 C/C++ 中的 const 修饰。 意味着只能在定义时赋值, 定义之外的地方不能修改值,修改就会导致编译报错。

也就是说, 在 rust 语言中, 如下两种定义变量的方式,默认带有 const 属性:

  • let 变量名 = 值; 相当于 C/C++ 的 const auto 变量名 = 值;
  • let 变量名:类型 = 值; 相当于 C/C++ 的 const 类型 变量名 = 值;

2.2 代码实例

d1.rs:

fn main() {let a = 1;println!("a {}", a);a = 2;println!("a {}", a);
}

编译运行,的确看到编译报错

zz@Legion-R7000P% rustc d1.rs 
error[E0384]: cannot assign twice to immutable variable `a`--> d1.rs:4:5|
2 |     let a = 1;|         -|         ||         first assignment to `a`|         help: consider making this binding mutable: `mut a`
3 |     println!("a {}", a);
4 |     a = 2;|     ^^^^^ cannot assign twice to immutable variableerror: aborting due to previous errorFor more information about this error, try `rustc --explain E0384`.

3. 可变变量 (mutable variable)

3.1 含义

所谓可变变量, 就是和前面提到的不可变变量相相反的一种情况: 定义时赋值, 然后定义之外的语句中可以修改值(不过数据类型不能改变)。

具体到代码层面, rust 语言提供了关键字 mut. 有两种用法:

  • let mut 变量名 = 值; 相当于 C/C++ 的 auto var = value;
  • let mut 变量名:类型 = 值; 相当于 C/C++ 的 T var = value;

3.2 代码实例

d2.rs

fn main() {let mut a = 1;println!("a {}", a);a = 2;println!("a {}", a);
}

编译运行:

zz@Legion-R7000P% rustc d2.rs
zz@Legion-R7000P% ./d2 
a 1
a 2

4. 总结

Rust 的变量定义, 不考虑引用类型的情况下,其实也不复杂,只有这4种情况。对照 C/C++ 写法, 很容易理解。 只不过需要明确的是, rust 变量默认是 immutable 的,相当于 const 的。受到这种影响的话, 其实写 C/C++ 时,也可以每次都加上 const, 避免不必要的修改,在编译器就可以捕获问题。

rust 语法c/c++ 语法
let 变量名 = 值;const auto 变量名 = 值;
let 变量名:类型 = 值;const 类型 变量名 = 值;
let mut 变量名 = 值;auto var = value;
let mut 变量名:类型 = 值;T var = value;

http://www.ppmy.cn/news/579052.html

相关文章

Vue组件------列表组件设计

文章目录 一 问题分析二.代码实现三.技术点回顾 一 问题分析 设计列表组件 关键点: ul,li布局, 两边留白 二.代码实现 基础布局 <ul v-if"seller.supports" class"supports"><li class"support-item" v-for"(item, index) in…

揭秘小米造车背后的「波折」和「犹豫」

来源&#xff5c;雷锋网 文&#xff5c;肖漫、李帅飞 小米造车已箭在弦上&#xff0c;但小米并未射出&#xff0c;而是选择了暂时放下。 雷锋网独家获悉&#xff0c;小米此前在“造车”一事上确实有过相关计划——由王川和黎万强这一“王炸组合”带队&#xff0c;成立小米控股&…

小米汽车,是小米的大棋,也是小米的活棋

小米进入新的发展阶段。 10月30日&#xff0c;小米董事长兼CEO雷军在社交媒体发布消息称&#xff0c;小米之家第10000家门店“深圳欢乐海岸店”正式开业。 01 小米之家门店破万&#xff0c;卢伟冰立下新目标 2020年底的Redmi Note 9系列发布会上&#xff0c;小米集团合伙人…

【REACT-04组件】

状态state 1.设置了state的组件称之为有状态组件&#xff0c;没有设置state的组件称之为无状态组件 2.组件中的数据&#xff1a; 3.在类中定义state&#xff08;只能写这个名字&#xff09;对象 state{key&#xff1a;value} 4.不能直接修改state&#xff1a;this.stat…

React之组件实例的三大属性之rel

文章目录 ref实例字符串形式回调函数形式createRef ref 组件内的标签可以定义属性来标识定义自己&#xff0c;有三种方式来进行定义。下面通过一个实例分别介绍 实例 做两个输入框&#xff0c;左边点击按钮有弹窗&#xff0c;右边输出后点击别处页面会有弹窗。 字符串形式 …

九号公司遭红杉小米顺为减持:半年共套现6.5亿元

雷递网 雷建平 1月15日 九号有限公司&#xff08;证券代码&#xff1a;689009&#xff09;日前公布主要股东减持进展。 本次减持存托凭证计划实施前&#xff0c;九号公司存托凭证持有人 Sequoia Capital China GF Holdco III&#xff0d;A,Ltd.&#xff08;简称&#xff1a;Seq…

小米耗时3年花200万换的新logo,太值了!!!

和大家八卦小米新logo之前&#xff0c;先给大家看看网上流程甚广的一张照片&#xff1a; 可能很多朋友认识不全&#xff0c;其中大佬很多。 李斌、李想、何小鹏、王传福、王兴、沈南鹏、程维、余凯、鲁伟鼎&#xff0c;这场聚会几乎集齐了中国智能电动车的半壁江山。 这是雷军发…

【React】React全家桶(二)组件+组件三大核心属性state-props-refs+事件处理与条件渲染+列表与表单+状态提升与组合+高阶函数与函数+函数柯里化

文章目录 1 组件1.1 函数组件1.2 类式组件 2 组件三大核心属性state-props-refs2.1 state2.1.1 关于state的理解2.1.2 类式组件中的使用state 2.2 props2.2.1 关于props的理解2.2.2 类式组件中使用 props2.2.3 函数式组件使用props2.2.4 props和state的区别 2.3 refs2.3.1 关于…