【Rust自学】15.3. Deref trait Pt.2:隐式解引用转化与可变性
15.3 Deref trait Pt.2隐式解引用转化与可变性15.3.1 函数和方法的隐式解引用转化隐式解引用转化deref coercion是为函数和方法提供的一种便捷特性。它的原理是假如类型T实现了Dereftrait那么解引用转化可以把T的引用转换成对T应用Deref之后得到的引用。当某个类型的引用被传给函数或方法但其类型与声明的参数类型不匹配时解引用转化会自动发生。编译器会对deref进行一系列调用把它转换成所需的参数类型。这个过程在编译时完成因此没有额外的性能开销。这句话比较抽象看个例子就明白了。我们接着上一篇文章的代码来写use std::ops::Deref; struct MyBoxT(T); implT MyBoxT { fn new(x: T) - MyBoxT { MyBox(x) } } implT Deref for MyBoxT { type Target T; fn deref(self) - T { self.0 } }这是上一篇文章的代码。它定义了MyBox元组结构体元组结构体的介绍详见 5.1. 定义并实例化struct创建了new函数并为其实现了Dereftrait因此可以对MyBox使用普通的解引用操作。以下是新增部分fn hello(name: str) { println!(Hello, {}, name); }hello函数接收str也就是字符串切片然后把它打印出来。再看主函数fn main(){ let m MyBox::new(String::from(Rust)); hello(m); }m是MyBoxString类型m就是MyBoxString。然而hello期望的是str但这段代码并不会报错。为什么首先MyBox已经实现了Dereftrait所以 Rust 可以调用deref把MyBoxString转换成String。这就是刚才那个比较抽象的规则。到这一步还没完。String和str是不同的类型那又是怎么转换的呢因为String也实现了Dereftrait而且它的deref实现返回的是str类型的字符串切片所以 Rust 会对String使用deref把String转换成str。最终类型就匹配了。如果 Rust 没有解引用转化写法会是这样hello((*m)[..]);先使用解引用运算符*把m从MyBoxString转换成String。再加上引用符号把String转换成String。通过切片语法[..]可以获得String完整内容的引用并将其值从String转换成str。15.3.2 解引用与可变性可以使用DerefMuttrait 来重载可变引用的*运算符。与Deref相比DerefMut多了Mut意思是DerefMut返回可变引用mut T而Deref返回不可变引用T。当类型和 trait 满足下列三种情况时Rust 会执行解引用转化- 当T: DerefTarget U时T可以转换成UT实现了Dereftrait且Deref下deref的返回类型是U因此T可以转换成U。例如上文代码中的MyBox类型实现了Deref其deref方法返回T所以MyBox可以转换成T。当T: DerefMutTarget U时mut T可以转换成mut U。T实现了DerefMuttraitDerefMut返回可变引用mut T且DerefMut下deref的返回类型是mut U因此mut T可以转换成mut U。当T: DerefTarget U时mut T可以转换成U。Rust 可以自动地把可变引用转换成不可变引用但反过来绝对不行。把不可变引用转换成可变引用要求该引用是唯一的借用规则中有讲详见 4.4. 引用与借用。

相关新闻

【Rust自学】15.4. Drop trait:告别手动清理,释放即安全

【Rust自学】15.4. Drop trait:告别手动清理,释放即安全

15.4 Drop trait:告别手动清理,释放即安全 15.4.1 Drop trait 的意义 如果某个类型实现了 Drop trait,就可以让程序员自定义值离开作用域时发生的操作。例如释放文件或网络资源。 在某些语言中(比如 C/C),对…

2026/8/12 7:07:20 阅读更多 →
SQL2025 数据库无法编辑

SQL2025 数据库无法编辑

目录 1.问题 2.查找到原因 3.安装最新的SQL管理工具 1.问题 安装了最近的SQL2025,可以查询等操作,但是无法进行编辑 2.查找到原因 SSMS 19.3 官方最高仅支持 SQL Server 2022,不支持 SQL Server 2025 现象:可以正常连接数据…

2026/8/10 19:51:46 阅读更多 →
矩阵账号视频同质化严重,AI 怎么做出差异化内容?

矩阵账号视频同质化严重,AI 怎么做出差异化内容?

一、发现问题:矩阵账号内容同质化导致流量衰退多数电商、MCN运营会搭建多平台、多账号矩阵体系,通过批量发布短视频扩大流量覆盖面。但矩阵运营过程中,普遍存在视频内容高度同质化的问题,多账号发布的视频镜头顺序、内容结构、文案…

2026/8/13 6:09:07 阅读更多 →

最新新闻

工业自动化流程设计新范式:从被动执行到主动进攻的智能控制

工业自动化流程设计新范式:从被动执行到主动进攻的智能控制

1. 项目概述:从“进攻”视角重构设备动作流程在工业自动化、机器人控制乃至智能家居领域,我们常常听到“流程”、“时序”、“控制逻辑”这些词。大多数文档和教程都习惯于从“设计者”或“维护者”的视角,平铺直叙地描述设备应该先做什么、再…

2026/8/14 3:59:59 阅读更多 →
11_DataFrame更改操作

11_DataFrame更改操作

设置行索引 创建DataFrame时如果不指定行索引,pandas会自动添加从0开始的索引。通过set_index()设置行索引 - inplace 是否进行原地操作, - 如果值是True,直接在原有DataFrame上进行修改, - 如果值是False,返回的是新…

2026/8/14 3:59:59 阅读更多 →
CRAG架构解析:基于置信度路由的检索增强生成技术

CRAG架构解析:基于置信度路由的检索增强生成技术

1. 项目概述:从“幻觉”到“置信度”的检索增强之路 在构建基于大语言模型(LLM)的应用时,我们常常面临一个核心矛盾:模型本身拥有强大的生成与推理能力,但其知识库受限于训练数据,存在“幻觉”&…

2026/8/14 3:59:59 阅读更多 →
从0到1落地电商网站建设流程图全流程解析与避坑指南

从0到1落地电商网站建设流程图全流程解析与避坑指南

本文关键词:电商网站建设流程图做电商的朋友可能都有过这样的经历:看着隔壁老王卖得风生水起,心里那个急啊,立马一拍大腿:“我也要做!”然后兴致勃勃地去联系外包公司,或者自己招了个技术团队,结果半年下来,网站上线了,功能也有了,但流量就是进不来,转化率更是惨不…

2026/8/14 3:59:59 阅读更多 →
从Claude Code源码看AI Agent架构:核心引擎与Harness层设计解析

从Claude Code源码看AI Agent架构:核心引擎与Harness层设计解析

1. 项目概述:从一次“意外”看AI Agent的工程化内核最近,一个名为“Claude Code”的AI Agent项目的源码在开发者社区中引起了不小的波澜。这并非一次官方的开源发布,而更像是一次意外的“泄漏”。但正是这次意外,为我们这些长期在…

2026/8/14 3:59:59 阅读更多 →
技术团队中三类让管理者心累的员工类型及改进指南

技术团队中三类让管理者心累的员工类型及改进指南

最近和几位技术团队的管理朋友聊天,发现一个挺有意思的现象:大家吐槽的“问题员工”类型,高度趋同。这些员工往往技术能力不差,甚至在某些方面很突出,但就是让管理者感到“心累”,甚至成为团队协作的“隐形…

2026/8/14 3:58:59 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →