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

Rust基础-part2-变量和可变类型

Rust基础[part2]_变量和可变类型

可变变量与不可变变量

可以不指定数据类型

可变变量——mutable

fn immutable() {let x = 5;println!("The value of x is: {}", x);
}

不可变变量——immutable

fn mutable() {let mut y = 10;println!("The value of y is: {}", y);y = 15;println!("The value of y is now: {}", y);
}

常量——constants

  • 需要制定明确的数据类型,并且需要使用大写字母

  • 需要使用常量表达式进行赋值

  • 不支持重定义(遮蔽)
    image-20250710101303874

const NUM: i32 = 5;
const THREE_HOURS: i32 = 60 * 60 * 3;

不可变量和常量的区别

  • 常量在编译期就就确定了值,不能在运行时进行改变; 不可变量知道运行期才能确认下来。
  • 常量不可修改,不可变变量可以通过shadowing来进行修改
  • 常量必须声明类型,不可变变量不需要声明类型。
  • 常量必须使用大写字母。

静态变量——static

需要通过mut来指定可变, unsafe 块是必须的,因为静态变量在多线程环境中可能会引发数据竞争问题。

static mut NUMBER: i32 = 10;fn static_num() {unsafe {println!("static NUMBER: {}", NUMBER);}// 这里可以访问静态变量NUMBER 
}

作用域scope和遮蔽shadowing

fn binding() {// 绑定生存于main函数中let long_lived_binding = 1;// 代码块, 比main函数拥有更小的作用域{// 绑定生存于代码块中// 这里的short_lived_binding只在这个代码块中有效let short_lived_binding = 2;println!("short_lived_binding: {}", short_lived_binding);// 遮蔽,在作用域中可以遮蔽成功let short_lived_binding = 3;println!("short_lived_binding after shadowing: {}", short_lived_binding);println!("long_lived_binding: {}", long_lived_binding);// 遮蔽长期绑定的变量// 这里的long_lived_binding会遮蔽外层的同名变量let long_lived_binding = 4;println!("long_lived_binding after shadowing: {}", long_lived_binding);}println!("long_lived_binding after block: {}", long_lived_binding);// println!("short_lived_binding after block: {}", short_lived_binding); // 这里会报错,因为short_lived_binding在代码块外不可见// 遮蔽长期绑定的变量let long_lived_binding = 5_f32;println!("long_lived_binding after shadowing: {}", long_lived_binding);}
http://www.dtcms.com/a/274002.html

相关文章:

  • C#中的设计模式:构建更加优雅的代码
  • 学弟让我帮忙写一个学生管理系统的后端,我直接上科技
  • 数据结构 之 【链式二叉树】(C语言实现二叉树的前序中序后序层序遍历,节点个数、树的高度、第K层的节点个数、查找、完全二叉树的判别、销毁创建二叉树)
  • 操作系统-进程
  • 加工进化论:SPL 一键加速日志转指标
  • 适配多场景,工业显示器让操作更高效
  • 2025最新版Docker讲解/面试/命令/容器化技术
  • 当信任上链解码区块链溯源系统开发逻辑与产业变革
  • 【第四节】ubuntu server安装docker
  • 专题:2025云计算与AI技术研究趋势报告|附200+份报告PDF、原数据表汇总下载
  • 探索飞算 JavaAI 进阶:解锁高效Java开发的新维度
  • VLM-R1 + GRPO 算法完整复现全过程日志
  • 在HTML中CSS三种使用方式
  • 飞算JavaAI:重塑Java开发的“人机协同“新模式
  • vue3+node.js+mysql写接口(二)
  • 优学教育实战03跟进管理
  • tensor
  • axios 与 fetch 的区别
  • C++前缀和与差分的深度探索
  • “SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价及拓展应用
  • K8s Service 终极解析:源码、性能、故障排查全攻略
  • 【VScode | 快捷键】全局搜索快捷键(ctrl+shift+f)失效原因及解决方法
  • Github创建仓库并通过VS Code推送项目
  • FPGA开发一个精确反馈控制算法 实现动态调控电磁反馈,控制流过线圈的电流,产生不同大小不同方向的磁力 电路结构设计PCB版图的绘制
  • 小白学Python,标准库篇——随机库、正则表达式库
  • Rail开发日志_5
  • 物联网与互联网融合生态
  • 鸿蒙 Secure Boot 全流程解析:从 BootROM 到内核签名验证的实战指南
  • 使用Selenium自动化获取抖音创作者平台视频数据
  • 深入解析:UPF/PGW-U如何通过PPP/L2TP隧道实现终端PAP/CHAP接入