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

华山论剑之Rust的Trait

在这里插入图片描述
华山论剑,群雄荟萃,各显神通。武林中人,各有所长,或剑法飘逸,或掌法刚猛,或轻功绝顶。这就好比Rust中的trait,它定义了一种武功套路,而不同的门派、不同的人,可以将这套武功练出不同的境界。

trait,便是这武林中的武功秘籍。 它规定了这一套武功的基本招式、套路,但具体如何施展,则因人而异。

比如,少林寺的《易筋经》,便是一门极高的内功心法。它规定了如何运行内力,如何锤炼筋骨。这《易筋经》,就好比一个trait。

trait YiJinJing {fn run_neili(&self) -> String;
}

然后,少林寺的各个弟子,都可以修炼这《易筋经》,但练出的效果却不同。

struct Abbot {name: String,
}impl YiJinJing for Abbot {fn run_neili(&self) -> String {format!("{}方丈运起《易筋经》,内力如海", self.name)}
}struct Disciple {name: String,
}impl YiJinJing for Disciple {fn run_neili(&self) -> String {format!("{}小和尚正在修炼《易筋经》", self.name)}
}

这样一来,不管是方丈还是小和尚,只要修炼了《易筋经》,都能运起内力。这就好比少林寺的弟子,虽然修为不同,但都掌握了《易筋经》的基本功法。

再比如,武当派的太极剑法,讲究以柔克刚,四两拨千斤。我们可以定义一个 TaiChiSword trait。

trait TaiChiSword {fn sword_dance(&self, opponent: &dyn TaiChiSword) -> String;
}

这样一来,不同的武当弟子,就可以相互切磋,各自施展太极剑法的精妙之处。

总结起来,Rust的trait就像武林秘籍,它定义了一套行为规范。不同的结构体可以实现同一个trait,就像不同的人可以修炼同一种武功。通过trait,我们可以让我们的代码更加灵活、可复用。

这Rust语言,真是深不可测。 它将编程的概念用武林的比喻来诠释,真是让人热血沸腾。

你瞧,这Rust语言,是不是很有趣?

进一步解读

  • trait就像武功秘籍: 它规定了武功的基本招式和套路。
  • 实现trait就像修炼武功: 不同的人修炼同一种武功,但修炼的境界不同。
  • trait的好处:
    • 代码复用: 多个人可以修炼同一种武功。
    • 多态: 可以将不同的人看作是修炼同一种武功的人。
    • 代码组织: 提高了武林的管理效率。

这个例子将抽象的编程概念与具体的、武侠世界相结合,使 Rust 的 trait 变得更加生动形象,更容易理解。

更深入的思考:

  • trait和武功心法区别: trait强调的是行为,而武功心法强调的是内功。
  • trait的应用场景: trait可以用于定义各种各样的武功,比如轻功、内功、剑法等等。

通过这个例子,我们可以更好地理解 Rust trait 的核心思想,以及它在实际编程中的应用。

相关文章:

华山论剑之Rust的Trait

华山论剑,群雄荟萃,各显神通。武林中人,各有所长,或剑法飘逸,或掌法刚猛,或轻功绝顶。这就好比Rust中的trait,它定义了一种武功套路,而不同的门派、不同的人,可以将这套武…...

AI 编译器学习笔记之七五 -- pdb 使用方法

1、进入调试状态有2种方法:Python工具PDB调试器的使用方法详解_python_脚本之家 (jb51.net) a) 在重新种设置断点正常执行:遇到代码中插入的pdb.set_trace()或者breakpoint()进入调试状态 b) 不修改命令行:直接使用 python3 -m pdb pdb_demo.…...

15分钟学Go 第8天:控制结构 - 循环

第8天:控制结构 - 循环 在Go语言中,循环是一种基本的控制结构,用于重复执行一段代码。今天我们将深入了解Go语言中的for循环,包括它的各种用法、语法结构、以及如何在实践中有效地应用循环。 1. for 循环的基本概念 for循环是G…...

后端接收参数的几种常用注解

目录 一、RequestParam 二、RequestBody 三、PathVariable 四、RequestHeader 五、RequestAttribute 六、RequestPart 七、Valid 一、RequestParam 1.作用 用于将请求中的 查询参数 或 表单参数 绑定到方法的参数上。支持 GET 和 POST 请求。 2.使用方法 GetMappin…...

如何使用docker在linux中配置C++环境

目录 1. 安装docker 2. 配置C环境 1)启动ubuntu:22.04容器 2)配置编译环境G 3)安装软件 4)测试 1. 如何打包容器生成tar? a. 生成容器镜像 b. 将镜像压缩成tar 2. 如何将容器内部的端口映射至宿主机&#xf…...

darknet_ros 使用教程

首先是git clone可能会因为到没有权限的问题(SSH),此时输入 git clone --recursive https://github.com/leggedrobotics/darknet_ros.git 下载成功之后 catkin_make -DCMAKE_BUILD_TYPERelease catkin失败原因(在CMakefile中&…...

第九课 Vue中的v-bind指令拓展

Vue中的v-bind指令 示例拓展 1&#xff09;切换样式 <style>.test{width: 100px;height: 100px;border: 3px solid #000;}.bg{background: red;}</style><div id"app"><input type"button" value"点击切换样式" click&qu…...

DOIP协议介绍2-Diagnostic power mode information request (0x4003)消息

DOIP&#xff08;Diagnostic communication over Internet Protocol&#xff09;是基于以太网的通讯协议&#xff0c;用于对UDS协议的数据进行传输&#xff0c;规范于ISO13400标准。DOIP的Type&#xff1a;Diagnostic power mode information request&#xff08;0x4003&#x…...

Eclipse 软件:配置 JDBC、连接 MySQL 数据库、导入 jar 包

目录 一、配置 JDBC &#xff08;一&#xff09;作用 &#xff08;二&#xff09;官网下载 1. 下载链接 2. 下载 3. 补充&#xff1a;压缩包分类与用途 &#xff08;三&#xff09;eclipse 导入 JDBC 的 jar 包 &#xff08;四&#xff09;加载数据库驱动 &#xff08;五…...

二叉树中的最长交错路径

题目链接 二叉树中的最长交错路径 题目描述 注意点 每棵树最多有 50000 个节点每个节点的值在 [1, 100] 之间起点无需是根节点 解答思路 要找到最长交错路径&#xff0c;首先想到的是深度优先遍历因为起点无需是根节点&#xff0c;所以对于任意一个节点&#xff0c;其可以…...

高校企业数据可视化平台功能介绍/特色功能

数据可视化平台是一款适用于高校教学和各领域企业的零门槛可视化工具&#xff0c;能够解决高校数据分析与可视化类课程教学、实训问题。平台采用B/S结构&#xff0c;用户不需要下载客户端&#xff0c;可通过浏览器进行访问。 数据可视化平台提供多种指标设计&#xff0c;学…...

RHCE第三次笔记SSH

第三章 远程连接服务器 1、远程连接服务器简介 &#xff08;1&#xff09;什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统&#xff0c;让你在远程终端前登录 linux 主机以取得可操作主机接口&#xff08;shell &#xff09;&#xff0c;而登录后…...

JAVA基础-包装类

文章目录 包装类1 概述2 Integer类2.1 Integer类构造方法2.2 Integer类成员方法 3 基本类型与字符串之间的转换3.1 基本类型转换为String3.2 String转换成基本类型 4 底层原理 第六章&#xff1a;算法小题练习一&#xff1a;练习二&#xff1a;练习三&#xff1a;练习四&#x…...

复合逻辑运算与复合逻辑门

或非门&#xff08;NOR gate&#xff09; 是一种基本的逻辑门&#xff0c;它结合了“或”&#xff08;OR&#xff09;和“非”&#xff08;NOT&#xff09;操作。或非门的输出是输入信号的否定&#xff0c;只有在所有输入都为零时&#xff0c;输出才为一。 与非运算&#xff0…...

工厂模式~

现实世界中的例子 考虑一个招聘经理的情况。一个人不可能为每一个职位都进行面试。根据职位空缺&#xff0c;她必须决定并将面试步骤委托给不同的人。 用简单的话来说 它提供了一种将实例化逻辑委托给子类的方法。 维基百科的解释 在基于类的编程中&#xff0c;工厂方法模式是…...

Elasticsearch基本使用及介绍

Elasticsearch 1. 关于各种数据库的使用 关于MySQL&#xff1a;是关系型数据库&#xff0c;能清楚的表示数据之间的关系&#xff0c;并且&#xff0c;是基于磁盘存储的&#xff0c;可以使用相对较低的成本存储大量的数据 关于Redis&#xff1a;是基于K-V结构的在内存中读写数…...

10. PH47代码框架文件组织

通过之前章节对PH47体系的介绍&#xff0c;读者对PH47能建立起了初步的概念及掌握各主要构成部分的使用开发方法。从本章节开始&#xff0c;就将对PH47代码的二次开发内容进行具体讲述。 本部分就将对PH47框架当中代码文件的组织方式及功能作用进行介绍&#xff0c;对于将来熟…...

LabVIEW提高开发效率技巧----VI继承与重载

在LabVIEW开发中&#xff0c;继承和重载是面向对象编程&#xff08;OOP&#xff09;中的重要概念。通过合理运用继承与重载&#xff0c;不仅能提高代码的复用性和灵活性&#xff0c;还能减少开发时间和维护成本。下面从多个角度介绍如何在LabVIEW中使用继承和重载&#xff0c;并…...

4.8 大数据发展趋势

文章目录 今天&#xff0c;我想与大家探讨一个充满潜力和变革的主题——大数据的发展趋势。大数据不仅正在改变我们的工作和生活方式&#xff0c;更是推动社会进步和经济发展的关键因素。 首先&#xff0c;让我们看看国内的大数据发展趋势。中国政府高度重视大数据产业&#x…...

【无标题】react组件封装

子组件制作 import { useState,useRef, useEffect} from "react"const Table (data)> {const {value ,option} dataconsole.log(value)const [stata,setValue] useState()const useRefs useRef(value)useEffect(()> {useRefs.current.value value })c…...

git+cmake将Open3D配置到visual studio

这里假设你已经安装好了上述内容&#xff0c;我们直接开始安装&#xff1a; 第一步&#xff1a;以管理员身份打开powershell&#xff0c;执行 git clone https://github.com/isl-org/Open3D.git然后依次执行 cd Open3D mkdir build cd build开启你的梯子&#xff0c;并设置你…...

ArcGIS-CityEngine 2024-新手小白也能试用+入门可视化vga编程--第一篇

目录 下载CityEngine并创建空项目 场景双击 _Tour &#xff08;Navigator面板)的就行了&#xff0c;&#xff08;不用额外下载&#xff09; 生成街道 基本操作 多个图层Group 区分 Editor 多个区域&#xff08;插件模式&#xff0c;浮空窗口&#xff0c; 官方的例子&…...

IntelliJ IDEA 快捷键大全(也适用全家桶其他编辑器)

以下是 IntelliJ IDEA 的常用功能快捷键大全&#xff0c;适用于 Windows/Linux 系统&#xff08;Mac 用户可将 Ctrl 替换为 Cmd&#xff0c;Alt 替换为 Option&#xff09;&#xff1a; 功能分类功能描述快捷键 (Windows/Linux)基本操作显示所有快捷键Ctrl J显示主菜单Alt H…...

基于SSM高校普法系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;律师管理&#xff0c;法律知识管理&#xff0c;新闻类型管理&#xff0c;法律新闻&#xff0c;律师推荐管理 律师账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xf…...

CDN加速流程分享

我们有IP,我们需要用CDN的阿里云进行加速&#xff0c;让网站的视频显示的更加流畅 首先&#xff0c;我们面对的第一个问题就是把ip解析成域名的形式&#xff0c;我们这里的域名是 edu.senhacore.xyz 解释一下为什么要变成域名才行&#xff0c;因为国内要使用cdn就必须把ip转…...

全网爆火的排队免单模式究竟是如何运作?

在私域平台的探索过程中&#xff0c;许多企业主尝试了链动21、推三返一等裂变模式。虽然这些模式在某些情况下取得了显著成效&#xff0c;但也有不少企业反映难以推广。问题的核心在于客户的购买意愿不足&#xff0c;市场动力缺乏。仅仅依靠推广团队的积极裂变是不够的&#xf…...

Excel:vba实现批量修改文件名

原文件名&#xff1a;修改后的文件名&#xff1a; Sub test() 我这里只定义了一个cell,其余的我没有定义 Dim cell As Range清空 A 列中所有的内容,确保之前的数据不会影响到后续的操作 [a:a].Clear获取文件加的名字&#xff0c;这里的dir函数只返回一个文件名,即该文件下的第…...

【数据分享】中国历史学年鉴(1979-2001)

数据介绍 目录如下&#xff1a; 特稿 2000年国际历史科学大会 史学研究 史学理论 西周春秋战国史 秦汉史 魏晋南北朝史 隋唐五代史 宋史 辽西夏金史 蒙元史 明史 清史 晚清政治史 近代文化史 中外关系史 近代经济史 近代社会史 近代思想史 民国政治史 世…...

ubuntu系统启动wmplayer提示vmware unable to install all modules的处理方法

1. 终端中输入下面的命令查看vmplayer版本 vmplayer -v 2. git clone https://github.com/mkubecek/vmware-host-modules.git 3. cd vmware-host-modules 4. make 5. sudo make install...

数据库原理与应用(基于MySQL):实验六数据查询

实验6.1 对学生实验数据库(stuexpm)的学生信息表(StudentInfo)和成绩信息表(Scorelnfo)进行信息查询,编写和调试查询语句的代码,完成以下操作 (1)使用两种方式查询Studentlnfo表的所有记录 ①使用列名表。 ② 使用*. use stuexpm;select StudentID,Name,Sex,Birthday,Specia…...