【Rust中级教程】1.17. 孤儿规则与连贯性(一致性):泛实现(Blanket Implementation)、覆盖实现(Covered Implementation)
1.17 孤儿规则与连贯性(一致性)泛实现(Blanket Implementation)、覆盖实现(Covered Implementation)1.17.1. 连贯性(一致性)属性连贯性(或者叫一致性)是指对于给定的类型和方法只会有一个正确的选择用于该方法对该类型的实现。孤儿规则(orphan rule)指的是只要trait或者类型在本地的crate那就可以为该类型实现该trait。比如说:- 你定义在本地的类型可以实现Debugtrait- 可以为bool类型实现你定义在本地的trait- 不能为bool类型实现Debugtrait因为这两者都不是定义在本地的这个孤儿规则也有例外我们下文再讲。1.17.2. 泛实现(Blanket Implementation)泛实现(Blanket Implementation)又叫通用实现它指的是Rust允许为所有符合某个trait约束的类型提供默认实现。它的模版是implT MyTrait for T where T:它的意思是为所有实现了某个trait的类型实现MyTrait。例如implT: Display ToString for T {}这句话的意思是为所有实现了Displaytrait的类型实现了ToStringtrait。这个例子的写法还不是模版的写法换成模版的写法就是implT ToString for T where T: Display {}需要注意的是只有定义trait的crate允许使用泛实现。添加泛实现到现有trait属于破坏性变化。1.17.3. 基础类型有些类型太过于基础了需要允许任何人在它们上实现trait(即使违反孤儿规则)。这些类型被标记为#[fundamental]目前包括T、mut T、BoxT、PinP。- 一点补充PinP的主要作用是确保某个值无法被移动即防止Rust代码调用std::mem::replace、std::mem::swap或者std::mem::take之类的操作导致值的物理地址发生变化- 处于孤儿原则的目的实际上在孤儿规则检查之前它们会被抹除注意对于基础类型使用泛实现也被认为是破坏性变化。1.17.4. 覆盖实现(Covered Implementation)有时候需要为外部类型实现外部trait这就叫覆盖实现(Covered Implementation)。这样写使用到了孤儿规则制定的一个狭窄的豁免允许在非常特定的情况下为外来类型实现外部trait。注意覆盖实现既可以指Covered Implementation也可以指Override Implementation又叫覆写实现这里指的是Covered Implementation。覆写实现指的是当结构体实现 trait并提供自己的方法时可以覆写Override默认实现。这种写法的模版是implP1..Pn ForeignTriatT1..Tn for T0P1..Pn和T1..T0指的是若干个参数这种写法只在以下条件被允许-T1..Tn里至少有一个是本地类型- 没有T(T是指泛型类型P1..Pn中的一个)在第一个这样的本地类型之前- 泛型类型参数P允许出现在T0..Ti只要它们被某种中间(intermediate)类型所包裹- 如果T作为其他类型(例如VecT)的类型参数出现那就说明T被包裹了-T只作为本身或者位于基础类型后(例如T)就不是包裹举个简单的例子比如说impl FromMyType for Veci32需要为外部的Veci32这个类型来实现FromMyType这个trait再举一些复杂的例子你可以对照着规则来理解实现是否可行implT FromT for MyTypeOKimplT FromT for MyTypeTOKimplT FromMyType for VecTOKimplT ForeignTraitMyType, T for VecTOK--------------------------------------------------------implT ForeignTrait for TNot OKimplT FromT for TNot OKimplT FromVecT for TNot OKimplT FromMyTypeT for TNot OKimplT FromT for VecTNot OKimplT ForeignTraitT, MyType for VecTNot OK判断覆盖实现是否是破坏性变化需要结合实际情况- 为现有trait添加新的实现且至少包含一个新的本地类型该本地类型满足和面条件这就是非破坏性的变化- 为现有的trait添加的实现不满足上述要求就是破坏性变化注意-implT ForeignTraitMyType, T for VecT是合法的-implT ForeignTraitT, MyType for VecT是非法的

相关新闻

开源智能体 OpenClaw「养虾」完整流程,新手部署避坑要点汇总(含安装包)

开源智能体 OpenClaw「养虾」完整流程,新手部署避坑要点汇总(含安装包)

🦞 OpenClaw 小龙虾双平台部署实战|搭建专属本地 AI 数字员工 适配平台:Windows 10/11(64 位)、Mac 系统|新手友好|图形可视化操作|无编程门槛 文中附上两大平台整合包下载链接&am…

2026/7/24 20:42:39阅读更多 →
HarmonyOS开发实战:小分享-DiscoverPage发现页——搜索栏+推荐模板+热门分享

HarmonyOS开发实战:小分享-DiscoverPage发现页——搜索栏+推荐模板+热门分享

前言 发现页 是用户探索新内容的入口,包含搜索栏、推荐模板横向滑动、热门分享列表等模块。小分享 App 的 DiscoverPage 使用 TextInput 实现搜索,横向 Scroll 展示推荐模板。本篇讲解搜索栏设计、横向模板滑动、热门分享卡片等。详细 API 可参考 Harmo…

2026/7/24 20:42:39阅读更多 →
华为MetaERP Oracle EBS R12 月结全流程(含操作路径 + 关键报表)+ 各模块标准会计分录(含月结特有分录)。内容偏实务、偏核算,分录用 “借 / 贷” 清晰列出,方便你直接对照做

华为MetaERP Oracle EBS R12 月结全流程(含操作路径 + 关键报表)+ 各模块标准会计分录(含月结特有分录)。内容偏实务、偏核算,分录用 “借 / 贷” 清晰列出,方便你直接对照做

Oracle EBS R12 月结全流程(含操作路径 关键报表) 各模块标准会计分录(含月结特有分录)。内容偏实务、偏核算,分录用 “借 / 贷” 清晰列出,方便你直接对照做账。一、Oracle EBS 月结整体顺序(…

2026/7/24 20:42:39阅读更多 →
Linux 嵌入式平台数据库

Linux 嵌入式平台数据库

1.数据库文件与普通文件区别: 1.普通文件对数据管理(增删改查)效率低 2.数据库对数据管理效率高,使用方便 2.常用数据库: 1.关系型数据库: 将复杂的数据结构简化为二维表格形式 大型:Oracle、DB2 中型:MySql、 SQLServer 小型:Sqlite 2.非关系型数据库 …

2026/7/24 22:06:53阅读更多 →
企业知识库 RAG 安全:当内部文档成为越狱的后门

企业知识库 RAG 安全:当内部文档成为越狱的后门

企业知识库 RAG 安全:当内部文档成为越狱的后门 一、当文档自己说话:RAG 系统的隐性越狱面 检索增强生成(RAG)已经成为企业把内部知识喂给大模型的主流方案。它让模型在回答前先去知识库里找相关片段,再把片段拼进上下…

2026/7/24 22:06:53阅读更多 →
五分钟解锁九大网盘真实下载链接:LinkSwift 完全使用指南

五分钟解锁九大网盘真实下载链接:LinkSwift 完全使用指南

五分钟解锁九大网盘真实下载链接:LinkSwift 完全使用指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…

2026/7/24 22:06:53阅读更多 →
5分钟掌握本地图片搜索神器:告别海量图片管理烦恼的终极指南

5分钟掌握本地图片搜索神器:告别海量图片管理烦恼的终极指南

5分钟掌握本地图片搜索神器:告别海量图片管理烦恼的终极指南 【免费下载链接】ImageSearch 基于.NET10的本地硬盘千万级图库以图搜图案例Demo和图片exif信息移除小工具分享 项目地址: https://gitcode.com/gh_mirrors/im/ImageSearch 还在为在数万张照片中寻…

2026/7/24 22:06:53阅读更多 →
如何快速掌握EZCard:面向桌游设计师的终极卡牌批量生成指南

如何快速掌握EZCard:面向桌游设计师的终极卡牌批量生成指南

如何快速掌握EZCard:面向桌游设计师的终极卡牌批量生成指南 【免费下载链接】CardEditor 一款专为桌游设计师开发的批处理数值填入卡牌生成器/A card batch generator specially developed for board game designers 项目地址: https://gitcode.com/gh_mirrors/ca…

2026/7/24 22:06:53阅读更多 →
AI内容粘贴后符号丢失怎么办?用AI导出鸭一键修复格式错乱问题

AI内容粘贴后符号丢失怎么办?用AI导出鸭一键修复格式错乱问题

1:AI内容粘贴后符号丢失怎么办?用AI导出鸭一键修复格式错乱问题 2:AI内容粘贴后符号丢失怎么办?AI导出鸭帮你解决Word导出难题 3:AI内容粘贴后符号丢失怎么办?AI导出鸭三种方式轻松搞定格式问题AI内容粘贴后…

2026/7/24 22:04:52阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 0:58:53阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 0:58:53阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 0:58:53阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述: 解法: 1、模拟(参考自【LeetCode 54】螺旋矩阵-CSDN博客) int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会,昔日AI六小龙来了五家,分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了,唯一缺席的竟是近几个月来风光无限的智谱。(DeepSeek一直不参加)WAI…

2026/7/24 0:00:06阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/23 22:58:43阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/24 19:00:40阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/24 19:00:40阅读更多 →