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

Rust系列(四) trait备忘录(持续更新)

上一篇:Rust系列(三) 类型系统与trait

基于官方文档进行简单学习记录,保证所有示例是可运行的基本单元。测试rust程序除了使用官方的playground之外,还可以通过定义[[example]]来运行程序。

文章目录

  • 1. Deref
  • 2. DerefMut

1. Deref

用于不可变对象的解引用操作,语法类似*v
官方文档:https://doc.rust-lang.org/std/ops/trait.Deref.html
trait源码

pub trait Deref {type Target: ?Sized;// Required methodfn deref(&self) -> &Self::Target;
}

备注:DerefDerefMut 设计之初就是为了适配和简化智能指针而设计的,应该避免为非智能指针实现相关trait,以造成混淆。
Deref coercion
假设类型T实现了Deref<Target = U> trait,有一个类型为T的变量x,有下面几条规则成立:

  • *x等价于*Deref::deref(&x)
  • 类型T必须实现所有类型U的不可变方法

应用示例

use std::ops::Deref;struct DerefExample<T> {value: T,
}impl<T> Deref for DerefExample<T> {type Target = T;fn deref(&self) -> &Self::Target {&self.value}
}fn main() {let x: DerefExample::<char> = DerefExample { value: 'a' };let target: char = *x;// a aprintln!("{} {}", target, 'a');
}

2. DerefMut

用于可变对象的解引用操作,语法类似*v = 1
官方文档:https://doc.rust-lang.org/std/ops/trait.DerefMut.html
trait源码

pub trait DerefMut: Deref {// Required methodfn deref_mut(&mut self) -> &mut Self::Target;
}

DerefMut coercion
假设类型T实现了DerefMut<Target = U> trait,有一个类型为T的变量x,有下面几条规则成立:

  • *x等价于*DerefMut::deref_mut(&mut x)
  • 类型T必须实现所有类型U的可变和不可变方法

应用示例

use std::ops::{Deref, DerefMut};struct DerefMutExample<T> {value: T,
}impl<T> Deref for DerefMutExample<T> {type Target = T;fn deref(&self) -> &Self::Target {&self.value}
}impl<T> DerefMut for DerefMutExample<T> {fn deref_mut(&mut self) -> &mut Self::Target {&mut self.value}
}fn main() {let mut x: DerefMutExample::<char> = DerefMutExample { value: 'a' };// a aprintln!("{} {}", *x, 'a');*x = 'b';// b aprintln!("{} {}", *x, 'a');
}

相关文章:

Rust系列(四) trait备忘录(持续更新)

上一篇&#xff1a;Rust系列(三) 类型系统与trait 基于官方文档进行简单学习记录&#xff0c;保证所有示例是可运行的基本单元。测试rust程序除了使用官方的playground之外&#xff0c;还可以通过定义[[example]]来运行程序。 文章目录 1. Deref2. DerefMut 1. Deref 用于不可…...

贪心算法总结及其leetcode题目N道

1 我为什么要写这个总结 1.1 字节笔试题 小明在玩一场通关游戏&#xff0c;初始血量为1&#xff0c;关卡有怪兽或者有血包&#xff08;正数就是血包可回血数&#xff0c;负数说明是怪兽的伤害值&#xff09;&#xff0c;当捡到血包时会加血量&#xff0c;碰到怪兽时会掉血&am…...

k8s的namespace一直处于terminating的解法

先试了强制替换&#xff0c;无法替换掉&#xff0c;强制删除&#xff0c;也删除不掉namespace [rootmaster k8s-study]# vi ns-demo.yaml [rootmaster k8s-study]# kubectl create -f ns-demo.yaml namespace/demo created [rootmaster k8s-study]# kubectl get -f ns-demo.ya…...

JAVA面试总结-Redis篇章(六)——数据过期策略

Java面试总结-Redis篇章&#xff08;六&#xff09;——数据过期策略 Redis数据删除策略——惰性删除Redis数据删除策略——定期删除 Redis数据删除策略——惰性删除 Redis数据删除策略——定期删除...

【LLM】大语言模型学习之LLAMA 2:Open Foundation and Fine-Tuned Chat Model

大语言模型学习之LLAMA 2:Open Foundation and Fine-Tuned Chat Model 快速了解预训练预训练模型评估微调有监督微调(SFT)人类反馈的强化学习(RLHF)RLHF结果局限性安全性预训练的安全性安全微调上手就干使用登记代码下载获取模型转换模型搭建Text-Generation-WebUI分发模型…...

Android是如何识别USB信号的

Android设备通过USB接口与外部设备通信时&#xff0c;会通过USB控制器&#xff08;USB Controller&#xff09;与USB设备进行通信。USB控制器是Android设备的一个硬件组件&#xff0c;它负责管理USB总线并控制所有USB设备的连接和通信。 当一个USB设备被插入Android设备的USB接…...

机器学习前言

1.机器学习和统计学关系 2.机器学习的发展 3.机器学习与深度学习的相同点与不同点 4.机器学习和深度学习优缺点 一、机器学习和统计学关系 机器学习和统计学密切相关&#xff0c;可以说机器学习是统计学在计算机科学和人工智能领域的应用。机器学习和统计学在方法论和技术上有…...

Java另一种debug方法(not remote jmv debug),类似python远程debug方式

这种Debug类似python的debug方式&#xff0c;是运行时将业务代码及依赖推送到Linux并使用Linux的java运行运行程。只要本地能运行&#xff0c;就能自动将代码推送到Linux运行&#xff0c;不需打包及设置远程debug jvm参数&#xff0c;适合一些项目Debug调试 运行时会推送一些依…...

【QT】Day4

1> 思维导图 2> 手动完成服务器的实现&#xff0c;并具体程序要注释清楚 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //客户端类 #include <QMessageBox> //…...

在CSDN学Golang云原生(Kubernetes Pod 有状态部署)

一&#xff0c;StatefulSet部署MongoDB集群 Kubernetes StatefulSet 是 Kubernetes 中的一种资源类型&#xff0c;它能够保证有状态服务&#xff08;Stateful Service&#xff09;的唯一性和顺序部署&#xff0c;适用于需要持久化存储、网络标识、状态管理等场景。MongoDB 是一…...

sql-从一个或多个表中向一个表中插入 多行

INSERT还可以将SELECT语句查询的结果插入到表中&#xff0c;此时不需要把每一条记录的值一个一个输入&#xff0c;只需 要使用一条INSERT语句和一条SELECT语句组成的组合语句即可快速地从一个或多个表中向一个表中插入 多行。 基本语法格式如下&#xff1a; INSERT INTO 目标表…...

ElementUI 实现动态表单数据校验(已解决)

文章目录 &#x1f34b;前言&#xff1a;&#x1f34d;正文1、探讨需求2、查阅相关文档&#xff08;[element官网](https://element.eleme.cn/#/zh-CN/component/form)&#xff09;官方动态增减表单项示例3、需求完美解决4、注意事项 &#x1f383;专栏分享&#xff1a; &#…...

Linux上定位线上CPU飙高

【模拟场景】 写一个java main函数&#xff0c;死循环打印 System.out.println(“111111”) &#xff0c; 将其打成jar包放在linux中执行 1、通过TOP命令找到CPU耗用最厉害的那个进程的PID 2、top -H -p 进程PID 找到进程下的所有线程 可以看到 pid 为 94384的线程耗用cpu …...

06-行向量列向量_向量的运算 加法,数乘,减法,转置

行向量和列向量 行向量是按行把向量排开&#xff08;横着来写&#xff09;&#xff0c; 列向量是按列把向量排开&#xff08;竖着来写&#xff09; 在数学中我们更多的把数据写成列向量&#xff0c;在编程语言中更多的把数据存成行向量! 如果想在编程语言中把行向量转化成列…...

基于Matlab实现最大类间方差阈值与遗传算法的道路分割(附上完整源码+图像+程序运行说明)

道路分割是计算机视觉和图像处理中的一个重要任务&#xff0c;它在交通监控、自动驾驶和地图制作等领域具有广泛的应用。其中&#xff0c;最大类间方差阈值和遗传算法是道路分割中常用的方法之一。本文将介绍如何使用Matlab实现最大类间方差阈值与遗传算法进行道路分割。 文章目…...

13.4.2 【Linux】sudo

相对于 su 需要了解新切换的使用者密码 &#xff08;常常是需要 root 的密码&#xff09;&#xff0c; sudo 的执行则仅需要自己的密码即可。sudo 可以让你以其他用户的身份执行指令 &#xff08;通常是使用 root 的身份来执行指令&#xff09;&#xff0c;因此并非所有人都能够…...

电脑软件:键盘按键修改器——keytweak使用介绍

对你的电脑键盘的布局不满意、键盘上的某个按键坏掉了等等键盘问题如何解决&#xff1f;有了KeyTweak这一切就可以轻松解决了&#xff0c;KeyTweak是一个免费软件程序&#xff0c;使用它可让你重新映射键盘键。如果您改变主意并想将其改回原样&#xff0c;只需点击一下即可容易…...

软件工程学术顶会——ICSE 2023 议题(网络安全方向)清单与摘要

按语&#xff1a;IEEE/ACM ICSE全称International Conference on Software Engineering&#xff0c;是软件工程领域公认的旗舰学术会议&#xff0c;中国计算机学会推荐的A类国际学术会议&#xff0c;Core Conference Ranking A*类会议&#xff0c;H5指数74&#xff0c;Impact s…...

【Python】jupyter Linux服务器使用

文章目录 环境使用访问 环境 pip install jupyter 使用 在你想访问的目录下执行&#xff1a; jupyter notebook --ip0.0.0.0jupyter 给出提示&#xff1a; [I 2023-07-28 14:32:43.589 ServerApp] Package notebook took 0.0000s to import [I 2023-07-28 14:32:43.597 Ser…...

element 级联 父传子

html代码例子 父组件 <el-cascaderstyle"width: 100%"change"unitIdChange":options"unitOptions"filterablev-model"formInline.unitId":props"unitProps"/></el-form-item>//改变级联传值到这个组件里面<r…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解

文章目录 一、开启慢查询日志&#xff0c;定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...