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

Rust 语言特性:impl 与 方法

在其他语言里我们通常不会特别区分“函数”和“方法”两个术语特别是在 Java 这类纯面向对象编程语言里。因为“函数”和“方法”是一回事。在 C 里情形稍有不同因为它是面向对象和面向过程的多范式语言即有独立存在的函数也有位于类里的“成员函数”是的 C 管类里的函数叫“成员函数”在 Rust 里情况又有所不同它有的独立的函数 (function)同时还有关联到 struct / trait / enum 上的函数Rust 把它们称之为方法 (method)暗示它们是从属于这些数据结构的。所以严谨一些的话在 Rust 里还是不要随意交叉使用这两个术语。下面我们看一下如何给一个结构体添加方法。假设有一个Rectangle结构体structRectangle{width:u32,height:u32,}下面我们要为其添加一下求解面积的方法应该这样写implRectangle{// 注意参数 selffnarea(self)-u32{self.width*self.height}}定义好这个方法后我们就能通过 Rectangle 的实例直接调用它了fnmain(){letrect1Rectangle{width:30,height:50,};println!(rect1.area() {},rect1.area());}首先是关键字impl它后面紧跟一个类型可以是 struct / trait / enum然后用花括号包裹起的部分就称为一个 impl 块impl block这个语法形式挺简洁易懂的仅从效果上看它是要给指定的 struct / trait / enum 添加一些“方法”。不过对于 rust 中的 struct / enum 来说它们并没有真正意义上的“方法”impl 实现的其实是关联到类型上的普通函数集合。怎么理解呢我们看一下使用 impl 定义的这些方法的真实情况。你应该注意到 area 方法的特殊之处它有一个self参数这个self代表的就是调用这个方法的 struct 实例而根据方法的意图和功能可以使用 self / mut self / self 等不同形式来控制所有权的授予。Rust 规定 impl 中的方法第一个参数必须是 self / mut self / self 关联函数除外这种语法形式并不陌生这和 C 的成员函数总是额外获得一个隐式的 this 指针以方法对象的其他成员非常类似。但是有一个细节需要我们注意尽管在方法声明中我们可以根据需要写 self / mut self / self 等不同形式但是你会发现像rect1.area()这样在调用时我们是不会显式传递第一个参数的从使用者的角度来说这很好非常方便但是你要注意到不管 area 方法声明的是 self、mut self 还是 self调用形式是一样的都是rect1.area()所以这里有一个细节就是Rust 会自动为 object 添加 、mut 或 *解引用 以便使 object 与方法签名匹配。现在回看rect1.area()你就能感觉到 Rust 通过 impl 定义的方法与它关联的结构体其实是一种很松散的绑定关系rect1.area()的调用更像是area(rect1)形式的语法糖。所以 struct 是没有真正意义上的“成员函数”的。最后还有一个前面一直没解释的“例外”关联函数它就是在定义在了 impl 块里但第一个参数不是 self 的任何形式的方法这样它就不会作用到一个具体的结构体实例上了这和其他语言中的静态成员函数是一样的。关联函数经常被用作返回一个结构体新实例的构造函数/工厂方法例如我们可以 Rectangle 添加一个square关联方法作为创建正方形的一种快捷方式implRectangle{// 无 self 参数是一个 关联函数fnsquare(size:u32)-Rectangle{Rectangle{width:size,height:size,}}}

相关文章:

Rust 语言特性:impl 与 方法

在其他语言里,我们通常不会特别区分“函数”和“方法”两个术语,特别是在 Java 这类纯面向对象编程语言里。因为“函数”和“方法”是一回事。在 C 里,情形稍有不同,因为它是面向对象和面向过程的多范式语言,即有独立存…...

抖音下载神器:3步轻松搞定无水印批量下载完整教程

抖音下载神器:3步轻松搞定无水印批量下载完整教程 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. …...

Windows右键菜单终极清理指南:ContextMenuManager快速上手教程

Windows右键菜单终极清理指南:ContextMenuManager快速上手教程 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager Windows右键菜单是日常操作中不可或缺…...

皮线、裸纤总是分不清?试试这个算法一键校准技巧

不知道你有没有经历过这种工地上的"崩溃瞬间":大热天蹲在居民楼昏暗的楼道里,蚊子在耳边嗡嗡叫,你手里正拉着一根刚从住户门缝里拽出来的皮线光缆,准备跟分纤箱引出来的单模裸纤做熔接。结果放进机器,合上盖…...

解锁音乐边界:Windows平台下网易云音乐NCM文件格式转换解决方案

解锁音乐边界:Windows平台下网易云音乐NCM文件格式转换解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 在数字音乐消费日益普及的今天&…...

可靠度理论导向的海床稳定性分析及评价方法【附仿真】

✨ 长期致力于可靠度、海床稳定性、随机场、响应面法、概率框架、随机有限元法研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)Karhunen-Love展开三维…...

LangChain Memory 完全指南:InMemorySaver、SQLite、Redis Stack 实战与避坑

LangChain Memory 完全指南:从内存到 Redis,让你的 AI 真正"记住"对话 📋 文章概览 解决什么问题: AI 对话没记忆?每次重启服务就失忆? 为什么值得读: 从踩坑到源码,3 种方…...

ncmdumpGUI完全手册:解锁网易云音乐NCM格式的终极Windows解决方案

ncmdumpGUI完全手册:解锁网易云音乐NCM格式的终极Windows解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾为网易云音乐下载的NCM格…...

保姆级教程:5分钟快速搭建你的DNC服务器,实现Fanuc/西门子数控程序远程传输与管理

数控机床程序远程管理实战:5分钟构建企业级DNC服务 在金属加工车间里,老师傅们弯腰在机床控制面板上手动输入程序的场景正逐渐成为历史。当车间里同时运行着发那科、西门子和三菱等不同品牌的数控设备时,如何高效管理这些设备的加工程序&…...

基于 Vibe Coding 的 OJ 平台

基于 Vibe Coding 的 OJ 平台 Github: https://github.com/wjlwjlwjlwjl-cmd/vibe-coding-based-oj-platform Gitee: https://gitee.com/wangs-joyful-home/vibe-coding-based-oj-platform 一个类 LeetCode 的在线编程评测平台,支持题目管理、代码提交、自动判题、提…...

OneMore:如何通过160+个功能命令彻底改变你的OneNote使用体验

OneMore:如何通过160个功能命令彻底改变你的OneNote使用体验 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore OneMore是一款专为OneNote设计的强大插件&…...

Pydantic序列化避坑指南:model_dump vs dict、exclude/include高级用法与SerializeAsAny解析

Pydantic序列化避坑指南:model_dump vs dict、exclude/include高级用法与SerializeAsAny解析 在Python生态中,Pydantic已经成为数据验证和序列化的标杆工具。但许多开发者在实际使用中,常常会遇到一些看似简单却容易踩坑的序列化问题。本文将…...

树莓派4B部署YOLOv8保姆级避坑指南:从PyTorch版本选择到模型推理全流程

树莓派4B部署YOLOv8实战手册:从版本适配到高效推理的深度解析 引言 在嵌入式设备上部署现代计算机视觉模型,就像给一辆微型赛车装上F1引擎——潜力巨大但挑战重重。最近帮朋友在树莓派4B上部署YOLOv8时,我们花了三天时间才走出"依赖地狱…...

Python:4 == 4.0 结果为True的原因

特殊情况:在 Python 中,整数和浮点数进行比较时,如果数值相等,则结果为 True。即 4 4.0 的结果是 True。如果两个对象代表相同的概念或数值,即使类型不同(如 int 和 float),也可能返…...

从0到1搭建AI-PPT流水线,支持中英双语自动适配+品牌VI强制注入(含可运行Python脚本+Power Automate配置包)

更多请点击: https://intelliparadigm.com 第一章:从0到1搭建AI-PPT流水线,支持中英双语自动适配品牌VI强制注入(含可运行Python脚本Power Automate配置包) 本方案构建端到端自动化PPT生成流水线,输入结构…...

物联网接入层技术剖析(四):当epoll遇见MQTT

Netty与高性能网络服务、Linux高并发网络编程实战、从epoll到Netty:物联网接入层技术剖析、深入理解I/O多路复用、服务端网络编程进阶指南 Netty与物联网:当epoll遇见MQTT 0 写在前面 这个系列写了三篇,从 select 到 epoll,从内…...

Sunshine游戏串流服务器:打造个人游戏云的终极免费方案

Sunshine游戏串流服务器:打造个人游戏云的终极免费方案 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要在任何设备上畅玩PC游戏吗?Sunshine作为一款开源…...

OpenAI通用推理模型攻克近80年数学难题,打脸7个月前虚假突破质疑

【导语:5月21日,OpenAI宣布其一款未对外发布的内部通用推理模型独立完成原创数学证明,推翻了匈牙利数学家保罗埃尔德什1946年提出的“平面单位距离猜想”,这是AI首次独立攻克数学领域核心著名公开难题。】AI攻克近80年几何猜想Ope…...

面试官问CyclicBarrier和CountDownLatch区别?这样回答直接拿Offer(附源码级对比和避坑点)

面试官问CyclicBarrier和CountDownLatch区别?这样回答直接拿Offer(附源码级对比和避坑点) 在Java并发编程的面试中,CyclicBarrier和CountDownLatch的区别几乎是必问的高频考点。但真正能打动面试官的,绝不仅仅是背诵教…...

别再找组策略了!Windows 11家庭版/专业版通用,一条命令搞定密码永不过期

Windows 11密码永不过期终极指南:告别繁琐设置,一条命令解决所有版本难题 每次开机都被"密码即将过期"的提示烦扰?作为Windows 11用户,你可能已经尝试过各种图形界面设置却无功而返。特别是家庭版用户,面对缺…...

Realsense D435i相机标定避坑指南:从棋盘格准备到OpenCV立体校正全流程

Realsense D435i相机标定实战:从硬件配置到立体校正的完整避坑手册 在三维视觉和机器人领域,相机标定是构建精准感知系统的基石。Intel Realsense D435i作为一款广泛使用的深度相机,其标定质量直接影响着SLAM、三维重建等应用的精度。本文将分…...

WinAsar:告别命令行!551KB的Electron asar文件可视化处理神器

WinAsar:告别命令行!551KB的Electron asar文件可视化处理神器 【免费下载链接】WinAsar Portable and lightweight GUI utility to pack and extract asar( Electron archive ) files, Only 551 KB! 项目地址: https://gitcode.com/gh_mirrors/wi/WinA…...

Richard Socher创业公司获6.5亿美元融资,欲让AI自动化研发引领底层范式转移

Richard Socher创业公司获巨额融资一家创业公司获得了GV(Alphabet旗下VC)和Greycroft共同领投的6.5亿美元早期融资,NVIDIA和AMD也参与本轮融资,它的估值达到了46.5亿美元。这家公司的创始人是Richard Socher,他是AI领域…...

别再手动改Hex了!用Vector HexView的/remap命令,5分钟搞定固件地址重映射

嵌入式开发革命:Vector HexView自动化重映射技术实战指南 在汽车电子和物联网设备开发中,固件地址调整如同家常便饭。每当内存布局变更、Bootloader升级或外设地址重新分配时,嵌入式工程师们就不得不面对一项枯燥且容易出错的任务——手动修改…...

Graphormer实战:用最短路径和虚拟节点搞定分子性质预测(附PyTorch代码)

Graphormer实战:从分子结构到性质预测的完整实现指南 在药物发现和材料科学领域,准确预测分子的物理化学性质可以大幅加速研发进程。传统方法依赖昂贵的实验测量或复杂的量子化学计算,而图神经网络(GNN)和Transformer的结合——Graphormer&a…...

5分钟实现OBS多平台同步直播:obs-multi-rtmp插件完全指南

5分钟实现OBS多平台同步直播:obs-multi-rtmp插件完全指南 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 你是否厌倦了在不同直播平台间来回切换的繁琐操作?obs-…...

城通网盘下载速度慢?3分钟学会ctfileGet终极免费提速方案

城通网盘下载速度慢?3分钟学会ctfileGet终极免费提速方案 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否曾经被城通网盘的龟速下载折磨得抓狂?面对50KB/s的限速、无尽的验…...

QQ音乐加密音频一键解密:qmcdump终极指南

QQ音乐加密音频一键解密:qmcdump终极指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否曾为QQ音乐下…...

ABAQUS结果导出太麻烦?试试这个隐藏技巧,5分钟搞定截面节点应力数据到Excel

ABAQUS结果导出效率革命:5分钟精准捕获截面节点数据的全流程指南 在结构仿真分析领域,数据后处理往往消耗工程师40%以上的工作时间。当我第一次面对ABAQUS中复杂的应力云图,试图提取某个螺栓连接面的节点应力数据时,整整浪费了两天…...

DownKyi:解锁B站8K超高清视频下载的5个核心优势

DownKyi:解锁B站8K超高清视频下载的5个核心优势 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等)…...