当前位置: 首页 > news >正文

rust 从入门到精通之变量和常量

变量和常量

随着软件系统安全的重要性与日俱增, rust这门集聚高并发, 安全, 适配云环境的编程语言在市场上得到了越来越高的认可和关注。但其复杂的机制使其难以学习。且其很多特性对于其他语言是全新的,这加剧了学习的困难程度。教程主要针对rust基础进行讲解, 虽然面向小白,但更推荐有 c/cppGo 语言等开发语言的开发人员进行学习。

rustGo 一样是支持自动判断变量类型的强类型语言

即: 其编译器可以自动判断变量类型, 但变量类型不能随意更改

1.声明

声明变量使用 let 关键字

// 声明整型变量
let a = 123;	// 编译器自动推断为 i32let b :i32 = 123;    // 变量 a 等价于 变量b

2.可变变量

rust 中有一个很重要也很特别的机制, 即: 变量不可变, 这与 rust 语言的所有权机制有关, 因篇幅有限, 这里只暂时提一句

这个机制在其他语言是没有的, 且看起来很奇怪, 但稍微做过一些项目的开发者都知道,
对于一些变量, 只会赋值一次, 以供其他对象使用, 如: 数据库连接变量

这类变量只会声明一次, 供其他对象进行调用, 而不会进行二次修改

rust 在默认情况下对变量进行了保护, 若需使变量可变, 则需使用 mut 关键字声明

// 声明可变变量
let mut num :i64 = 1;
num = 2;
println!("num is {}", num);     // num is 2

3.重影

重影在 rust 中是一个很重要的机制, 其使一个变量可以被更改, 其与可变变量不同, 重影是直接将变量覆盖掉

区别:

  • 可变变量: 对变量重新赋值, 不能更改变量类型
  • 重影: 对变量进行覆盖, 可以同时更改变量数据类型和值
let mut y:i32 = 1;
let mut y:f32 = 3.1415926;	// 这里将 y 从整型改为了 浮点型
println!("y is {}",  y);    // y is 3.1415925

4.静态变量

静态变量使用 static 关键字声明
静态变量类似于其他语言中的全局变量, 不同的是, 全局变量需声明在函数之外, 但 rust 中的静态变量既可以声明在函数外, 也可以声明在函数内部
注意:

  1. 静态变量默认情况下在程序运行期间只被初始化一次, 且其作用域为整个程序, 即使在函数内部声明, 也一样
  2. 静态变量变量在初始化时, 必须指明其数据类型, 及其初始值
  3. 在 unsafe(不安全)代码块中, 可以搭配 mut 进行声明, 使静态变量可以进行修改

警告: static mutrust官方文档中提示 2027 年后将会被移除, 故不建议使用

static APP_VERSION1: f32 = 1.0;
fn main{println!("app version1 is {}", APP_VERSION1);    // app version1 is 1.0static APP_VERSION2 :f32 = 1.1;println!("app version2 is {}", APP_VERSION2);    // app version2 is 1.1// 声明可变的静态变量unsafe {static mut APP_VERSION3 :f32 = 1.2;APP_VERSION3 = 1.3;let value = APP_VERSION3;println!("app version3 is {}", value);    // app version3 is 1.3}
}

5.常量

rust 中的常量使用 const 关键字声明, 且与其他语言类似, 必须在定义时进行初始化, 指定其数据类型和值

常量与静态变量类似, 可以声明在函数外, 也可以声明在函数内部, 但常量默认情况下在程序运行期间只被初始化一次, 且其作用域为整个程序, 即使在函数内部声明, 也一样, 且常量不存在可以重新赋值的情况

常量标识符 与 变量标识符 不同, 常量标识符必须使用大写字母, 且使用下划线进行单词分割

const CONST_NUM :i32 = 100;
println!("const is {}", CONST_NUM);    // const is 100
http://www.xdnf.cn/news/1322713.html

相关文章:

  • 从 ORA-12703 到顺利入库:Go + Oracle 11g GBK 字符集踩坑记20250818
  • [免费]基于Python的全国气象数据采集及可视化大屏系统(Flask+request库)【论文+源码+SQL脚本】
  • elasticsearch-集成prometheus监控(k8s)
  • 【LeetCode题解】LeetCode 74. 搜索二维矩阵
  • 【深度长文】Anthropic发布Prompt Engineering全新指南
  • IDE开发系列(2)扩展的IDE框架设计
  • 【音视频】瑞芯微、全志芯片在运动相机和行车记录仪产品分析
  • mybatis连接数据库
  • Kafka 零拷贝(Zero-Copy)技术详解
  • 数据赋能(401)——大数据——持续学习与优化原则
  • RAG 入门指南:从概念到最小系统搭建
  • 基于Android的随身小管家APP的设计与实现/基于SSM框架的财务管理系统/android Studio/java/原生开发
  • 从0-1使用Fastmcp开发一个MCP服务,并部署到阿里云百炼 -持续更新中
  • Flutter 自定义 Switch 切换组件完全指南
  • 深度学习——R-CNN及其变体
  • React diff——差异协调算法简介
  • 【Python面试题】写一个用元类(metaclass)实现API接口自动注册的Demo。以及装饰器在项目中典型应用场景。
  • AI行业应用深度报告:金融、医疗、教育、制造业落地案例
  • 前端环境安装
  • AI 在金融领域的落地案例
  • go语言条件语if …else语句
  • ——链表——
  • 音频算法工程师技能1
  • 调试技巧(vs2022 C语言)
  • 【速通】深度学习模型调试系统化方法论:从问题定位到性能优化
  • 剧本杀小程序系统开发:保障游戏公平,营造健康娱乐环境
  • 蔬菜批发小程序:生产商的数字化转型利器——仙盟创梦IDE
  • 云计算-云上实例部署 RocketChat:Mongodb、主从数据库、Node 环境配置指南
  • 【人工智能】2025年AI代理失控危机:构建安全壁垒,守护智能未来
  • Python 面向对象三大特性详解(与 C++ 对比)