当前位置: 首页 > 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.lryc.cn/news/585734.html

相关文章:

  • LVS-NAT模式配置
  • 期望和方差的计算
  • 深度学习×第8卷:优化器与训练流程进阶——她开始跑起来,学着一次次修正自己
  • 深度体验飞算JavaAI:一场Java开发效率的革命
  • 百度2026届校招开启,大规模发力AI的百度未来何在?
  • Telnet远程连接实验(Cisco)
  • Redis事务失败的处理机制与处理方案
  • 日历插件-FullCalendar的详细使用
  • C++:非类型模板参数,模板特化以及模板的分离编译
  • 【整数大求余草稿】2022-3-7
  • 进制转换原理与实现详解
  • Qt中QGraphicsView类应用解析:构建高效2D图形界面的核心技术
  • vue table 自定义处理 key 作为 表头
  • AUTOSAR进阶图解==>AUTOSAR_SWS_IOHardwareAbstraction
  • [精选]如何解决pip安装报错ModuleNotFoundError: No module named ‘subprocess’问题
  • Matlab裁剪降水数据:1km掩膜制作实战
  • C++STL-list
  • 这个方法的目的是检查一个给定的项目ID(projectId)是否在当前数据库中被使用(搜索全库)
  • 四、神经网络——正则化方法
  • VLM-R1 + GRPO 算法完整复现全过程日志
  • Linux修炼:权限
  • SpringCloud【OpenFeign】
  • 学习日记-spring-day46-7.11
  • 伺服驱动控制CANopen协议
  • 网络编程(基本概念)
  • 【C++篇】二叉树进阶(上篇):二叉搜索树
  • TCP详解——流量控制、滑动窗口
  • mysql的性能优化:组提交、数据页复用、全表扫描优化、刷脏页
  • 【JMeter】调试方法
  • 论容器化 | 分析Go和Rust做医疗的后端服务