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

rust 中ref和区别

在 Rust 中,ref 关键字和 & 符号都与引用(reference)相关,但它们在使用场景和含义上有根本的区别:
  • & (引用符号) 用于创建引用或声明接收引用的类型。
  • ref (关键字) 用于模式匹配(如 let 绑定、for 循环、match 表达式)中,以改变绑定的方式,使其绑定到一个值的引用,而不是直接绑定到值本身。
 
1. & 符号:引用操作符
& 是最常见的创建引用的方式。
  • 创建不可变引用: let r = &value;
  • 创建可变引用: let mr = &mut value;
  • 在函数签名中指定参数类型: fn func(arg: &Type) {}
它是一个表达式操作符,作用于一个值(value)上。
 
2. ref 关键字:模式匹配修饰符
ref 关键字用在赋值(绑定)过程的左侧,即模式(pattern)中。它的作用是告诉编译器:“在这个特定的绑定中,我不想获取值的所有权或拷贝值,我只想得到这个值的引用。”
 
核心区别总结
 
特性& 符号ref 关键字
位置 表达式的右侧(值前面) 模式的左侧(变量名前面)
作用 创建一个新的引用 修改绑定的行为为“按引用绑定”
目的 借用数据 在解构(模式匹配)时避免所有权转移
 
使用场景示例
最能体现区别的场景是 let 绑定和 match 表达式。
 
示例一:let 绑定和解构
假设我们有一个元组 (i32, i32)
let point = (1, 2);// 使用 & 创建引用(右侧)
let r = &point; 
// r 的类型是 &(i32, i32),它是一个指向 point 的引用。// 使用 ref 在模式匹配中获取内部元素的引用(左侧)
// 解构 point 元组,并将内部元素的引用绑定到 x 和 y
let (ref x, ref y) = point; 
// x 的类型是 &i32,y 的类型是 &i32。
// 注意:point 的所有权没有被移动。// 如果不使用 ref,所有权会被移动(如果 point 是可移动类型)或者发生拷贝(i32 是 Copy 类型)
let (x_val, y_val) = point; // 发生拷贝
// x_val 和 y_val 的类型是 i32
示例二:match 表达式
在 match 语句中,如果你想根据一个引用进行匹配,并且在匹配分支中仍然使用引用,你需要同时使用 & 和 ref
 
#[derive(Debug)]
struct Person {name: String,age: u8,
}let person = Person { name: String::from("Alice"), age: 30 };// 匹配一个 &Person 类型的引用
match &person { // 在这里,如果你只写 name,你会得到一个 String 的引用 &String// 但如果你使用 ref name,你是在创建一个新的绑定 name,它的类型是 &String&Person { ref name, age } => {// person 的所有权没有被 moveprintln!("匹配到名字: {}", name);println!("Age: {}", age);}
}
结论
理解这两者的关键在于左右区别:
  • 当你需要创建一个指向已有数据的引用时,使用 &(放在值的右侧表达式中)。
  • 当你需要在解构数据时将绑定方式修改为按引用绑定时,使用 ref(放在模式的左侧变量名前)。

参考资料:

1. ref与&区别

 

http://www.rkmt.cn/news/59958.html

相关文章:

  • 固定资产分类
  • 2025 年 11 月纯化水设备厂家权威推荐榜:生物制药/医疗器械/食品/化妆品/实验室/工业反渗透纯化水系统专业解析与高效解决方案
  • 什么是分布式操作系统?
  • 跨网文件交换系统助力企业安全高效的数据传输与协作
  • 基于栅格地图的遗传算法路径规划MATLAB实现
  • 2025年广东针灸技术学习班机构权威推荐榜单:学习针灸推拿/学习针灸按摩/学习针灸按摩源头机构精选
  • 基于STM32驱动AD7606并进行数据显示
  • 2025年11月 降本增效机构推荐
  • 【案例分享】如何利用图表控件TeeChart集成,实现可持续环境修复
  • 2025年画册设计公司权威推荐榜单:专业选择指南
  • Mass rape to death and murder
  • ABViewer 16全新发布:3D可视化、PDF转DWG、G-code生成全面升级
  • JimuReport 积木报表 v2.2.0 版本发布,免费的可视化报表和大屏
  • 利用朴素贝叶斯对UCI 的 mushroom 数据集进行分类
  • 2025 美本留学机构十大推荐:双轨赋能冲刺名校,2025-2026 申请季选对机构赢在起点!
  • 为什么企业死盯第一学历?
  • 移动端弱网优化专题(十五):字节跳动移动端网络HttpDNS优化实践
  • ClickHouse的实践经验
  • 小白建站3天就被爬?10分钟部署免费WAF,护住我的Java学习笔记
  • 医疗器械注册公司哪家好?2025年权威机构推荐榜单
  • 超越像素:兰亭妙微揭示,卓越的APP界面设计始于“产品策略”
  • 基于SVM与K-means的图像分割实现
  • 控油好用洗发水牌子盘点!什么洗发水去屑止痒控油又蓬松?9款高口碑必入清单
  • Setup线程组使用注意事项 - BKY007
  • 丐版 OI 技巧 / 杂项部分总结 + 作者学习笔记
  • 2025年口碑好的铝木实验台厂家推荐及选择指南
  • QCombox
  • 2025 排渣分离机厂家标杆:金双联专业排渣分离机定制,配套纸塑分离 / 塑料清洗设备,出口全球十余国
  • xUnit Theory: Working With InlineData, MemberData, ClassData
  • 现今芜湖除甲醛公司排名:2025年专业机构推荐指南