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

【unitrix】 3.5 类型级别的比较系统(cmp.rs)

一、源码

这段代码定义了一个类型级别的比较系统,主要用于在编译时比较类型并得出比较结果。它使用了 Rust 的类型系统和标记特征(trait)来实现这一功能。

use crate::sealed::Sealed;
use crate::number::{Z0, P1, N1};
use core::cmp::Ordering;// 比较结果类型别名
pub type Equal = Z0;   // 相等
pub type Less = N1;    // 小于
pub type Greater = P1; // 大于/// 标记特征(trait),用于比较结果类型:`Greater`、`Equal` 和 `Less`
pub trait Ord: Sealed {/// 将类型转换为运行时的 `Ordering` 值fn to_ordering() -> Ordering;
}impl Ord for Greater {#[inline]fn to_ordering() -> Ordering {Ordering::Greater  // 返回"大于"的比较结果}
}impl Ord for Less {#[inline]fn to_ordering() -> Ordering {Ordering::Less  // 返回"小于"的比较结果}
}impl Ord for Equal {#[inline]fn to_ordering() -> Ordering {Ordering::Equal  // 返回"等于"的比较结果}
}/// 类型比较运算符,用于比较 `Self` 和 `Rhs` 类型。
/// 类似于 [`core::cmp::Ord::cmp`] 但用于类型比较。
///
/// # 示例
/// ```rust
/// use unitrix::number::{Cmp, Ord, N1, Z0, P1};
/// use std::cmp::Ordering;
///
/// assert_eq!(<Z0 as Cmp<N1>>::Output::to_ordering(), Ordering::Greater);
/// assert_eq!(<Z0 as Cmp<Z0>>::Output::to_ordering(), Ordering::Equal);
/// assert_eq!(<Z0 as Cmp<P1>>::Output::to_ordering(), Ordering::Less);
/// ```
pub trait Cmp<Rhs = Self> {/// 比较结果的类型(只能是 `Greater`、`Less` 或 `Equal` 之一)type Output;#[doc(hidden)]  // 隐藏内部实现fn compare(&self, rhs: &Rhs) -> Self::Output;
}

二、源码分析

  1. 类型别名定义
pub type Equal = Z0;   // 相等
pub type Less = N1;    // 小于
pub type Greater = P1; // 大于

定义了三种比较结果的类型别名:

  • Equal 表示相等,对应 Z0(零类型)

  • Less 表示小于,对应 N1(负一类型)

  • Greater 表示大于,对应 P1(正一类型)

  1. Ord 特征(trait)
pub trait Ord: Sealed {fn to_ordering() -> Ordering;
}

这是一个标记特征,用于比较结果类型(Greater、Equal 和 Less)。它要求实现类型能够将自己的比较结果转换为运行时的 Ordering 枚举值。

为三种比较结果类型实现了 Ord 特征:

  • Greater 转换为 Ordering::Greater

  • Less 转换为 Ordering::Less

  • Equal 转换为 Ordering::Equal

  1. Cmp 特征(trait)
pub trait Cmp<Rhs = Self> {type Output;fn compare(&self, rhs: &Rhs) -> Self::Output;
}

这是核心的比较特征,类似于 core::cmp::Ord::cmp,但用于类型级别的比较。它定义了:

  • Output:比较结果的关联类型(必须是 Greater、Less 或 Equal 之一)

  • compare 方法:执行比较操作并返回结果(虽然定义为方法,但主要用于类型系统)

  1. 使用示例
assert_eq!(<Z0 as Cmp<N1>>::Output::to_ordering(), Ordering::Greater);
assert_eq!(<Z0 as Cmp<Z0>>::Output::to_ordering(), Ordering::Equal);
assert_eq!(<Z0 as Cmp<P1>>::Output::to_ordering(), Ordering::Less);

展示了如何使用这个系统:

  1. 比较 Z0 和 N1,结果是 Greater(0 > -1)

  2. 比较 Z0 和 Z0,结果是 Equal(0 == 0)

  3. 比较 Z0 和 P1,结果是 Less(0 < 1)

  4. 其他说明

  • Sealed 特征用于防止外部代码实现这些特征,保持实现的封闭性

  • #[inline] 属性提示编译器内联这些简单函数

  • #[doc(hidden)] 隐藏了 compare 方法的文档,表示这是内部实现细节

这个系统主要用于类型级别的编程,允许在编译时进行类型比较,而不是在运行时。这在一些高级类型系统中非常有用,比如在构建类型安全的单位系统或维度分析时。

相关文章:

【unitrix】 3.5 类型级别的比较系统(cmp.rs)

一、源码 这段代码定义了一个类型级别的比较系统&#xff0c;主要用于在编译时比较类型并得出比较结果。它使用了 Rust 的类型系统和标记特征(trait)来实现这一功能。 use crate::sealed::Sealed; use crate::number::{Z0, P1, N1}; use core::cmp::Ordering;// 比较结果类型…...

防御式编程:防止 XSS 攻击

对用户输入进行编码和过滤是防止 XSS 攻击的关键。以下是改进后的代码示例&#xff1a; from flask import Flask, request, escape from markupsafe import Markup app Flask(__name__) app.route(/comment, methods[POST]) def comment(): user_comment escape(re…...

【Java项目设计】基于Springboot+Vue的OA办公自动化系统

介绍&#xff1a; 基于Springboot为后端&#xff0c;vue为前端的企业综合性OA办公自动化平台&#xff0c;涵盖九大核心模块&#xff0c;全方位解决企业日常办公需求&#xff0c;提升工作效率和管理水平。系统采用模块化设计&#xff0c;功能全面且易于扩展&#xff0c;从基础登…...

WebServer实现:muduo库的主丛Reactor架构

前言 作为服务器&#xff0c;核心自然是高效的处理来自client的多个连接啦&#xff0c;那问题在于&#xff0c;如何高效的处理client的连接呢&#xff1f;这里就介绍两种架构:单Reactor架构和主丛Reactor架构。 单Reactor架构 单Reactor架构的核心为&#xff0c;由一个主线程监…...

每天一个前端小知识 Day 7 - 现代前端工程化与构建工具体系

现代前端工程化与构建工具体系 1. 为什么要工程化&#xff1f;&#xff08;面试高频问题&#xff09; 问题痛点&#xff1a; 模块太多、无法组织&#xff1b;代码冗长、性能差&#xff1b;浏览器兼容性差&#xff1b;团队协作混乱&#xff0c;缺少规范与自动化。 工程化目标…...

nginx的下载与安装 mac

1. 下载 方法一&#xff1a;本地下载 链接&#xff1a;https://nginx.org/en/download.html&#xff08;可直接搜官网&#xff09; 下载到本地后&#xff0c;上传到linux的某个文件夹中 方法二&#xff1a;直接linux上下载&#xff08;推荐&#xff09; wget -c http://ngi…...

[持续集成]

学习目标 能够使用 Git 代码托管平台管理代码能够实现 jenkinspostman 的持续集成能够实现 jenkins代码 的持续集成 持续集成 概念 : 将自己工作成果持续不断地把代码聚集在一起,成员可以每天集成一次或多次相关工具 : git : 代码管理工具,自带本地仓库gitee : 远程代码管理…...

Spring Aop @AfterThrowing (异常通知): 使用场景

核心定义 AfterThrowing 是 Spring AOP 中专门用于处理异常场景的**通知&#xff08;Advice&#xff09;**类型。它的核心作用是&#xff1a; 仅在目标方法&#xff08;连接点&#xff09;的执行过程中抛出异常时&#xff0c;执行一段特定的逻辑。如果目标方法成功执行并正常…...

【赵渝强老师】Kubernetes的安全框架

Kubernetes集群的安全框架主要由以下认证、鉴权和准入控制三个阶段组成。这三个阶段的关系如下图所示。 视频讲解如下 【赵渝强老师】Kubernetes的安全框架 认证&#xff08;Authentication&#xff09; 当客户端与Kubernetes集群建立HTTP通信时&#xff0c;首先HTTP请求会进…...

【Python小练习】3D散点图

资产风险收益三维分析 背景 王老师是一名金融工程研究员&#xff0c;需要对多个资产的预期收益、风险&#xff08;波动率&#xff09;和与市场的相关性进行综合分析&#xff0c;以便为投资组合优化提供决策依据。 代码实现 import matplotlib.pyplot as plt from mpl_toolk…...

腾讯混元3D制作简单模型教程-2

以下是腾讯混元3D制作简单模型的详细教程&#xff0c;整合最新版本特性&#xff08;截至2025年6月&#xff09;&#xff0c;操作门槛低且无需专业基础&#xff1a; &#x1f5a5; 一、在线生成&#xff08;最快30秒完成&#xff09; ‌访问平台‌ 打开 腾讯混元3D创作引擎官网…...

NVIDIA开源Fast-dLLM!解析分块KV缓存与置信度感知并行解码技术

Talk主页&#xff1a;http://qingkeai.online/ 文章原文&#xff1a;https://mp.weixin.qq.com/s/P0PIAMo1GVYH4mdWdIde_Q Fast-dLLM 是NVIDIA联合香港大学、MIT等机构推出的扩散大语言模型推理加速方案。 论文&#xff1a;Fast-dLLM: Training-free Acceleration of Diffusion…...

大白话说目标检测中的IOU(Intersection over Union)

很多同学在学习目标检测时都会遇到IoU这个概念&#xff0c;但总觉得理解不透彻。这其实很正常&#xff0c;因为IoU就像个"多面手"&#xff0c;在目标检测的各个阶段都要"打工"&#xff0c;而且每个阶段的"工作内容"还不太一样。 今天我就让IoU自…...

CentOS 8解决ssh连接github时sign_and_send_pubkey失败问题

我在一台centos8机器上安装git环境以连接到github&#xff0c;首先第一步需配置好ssh环境&#xff0c;因为我已经有一台Ubuntu机器已经配置好ssh环境&#xff0c;所以我ftp Ubuntu机器取得id_rsa id_rsa.pub known_hosts三个文件&#xff0c;然后执行命令&#xff1a; $ git …...

回答 如何通过inode client的SSLVPN登录之后,访问需要通过域名才能打开的服务

需要dns代理 1 配置需求或说明 1.1 适用的产品系列 本案例适用于软件平台为Comware V7系列防火墙&#xff1a;本案例适用于如F5080、F5060、F5030、F5000-M等F5000、F5000-X系列的防火墙。 注&#xff1a;本案例是在F100-C-G2的Version 7.1.064, Release 9510P08版本上进行…...

OpenCV实现二值图细化(骨架提取)

对二值图进行细化&#xff08;骨架提取&#xff09;&#xff0c;也就是把每根线条细化到一个像素的宽度。有两个比较成熟的算法实现此功能&#xff0c;分别是Zhang-Suen算法和Guo-Hall算法。 我们下面使用OpenCVSharp&#xff0c;使用C#实现上述两个算法&#xff1a; private…...

Excel常用公式大全

资源宝整理分享&#xff1a;https://www.httple.net Excel常用公式大全可以帮助用户提高工作效率&#xff0c;掌握常用的Excel公式&#xff0c;让数据处理和计算工作更加便捷高效。了解公式学习方法、用途&#xff0c;不再死记硬背&#xff0c;拒绝漫无目的。 命令用途注释说…...

在 Windows 上使用 Docker Desktop 快速搭建本地 Kubernetes 环境(附详细部署教程)

言简意赅的讲解Docker Desktop for Windows搭建Kubernetes解决的痛点 目标读者&#xff1a; 对 Docker Desktop 有一定了解&#xff0c;能在 Windows 上成功安装和使用 Docker Desktop。想要在本地快速搭建一套 Kubernetes 环境进行测试或学习的开发者。 一、准备工作 安装 Doc…...

Python设计模式终极指南:18种模式详解+正反案例对比+框架源码剖析

下面我将全面解析18种Python设计模式&#xff0c;每种模式都包含实际应用场景、优缺点分析、框架引用案例、可运行代码示例以及正反案例对比&#xff0c;帮助您深入理解设计模式的价值。 一、创建型模式&#xff08;5种&#xff09; 1. 单例模式&#xff08;Singleton&#x…...

第1章: 伯努利模型的极大似然估计与贝叶斯估计

伯努利模型的极大似然估计与贝叶斯估计 import numpy as np import matplotlib.pyplot as plt from scipy.stats import beta, bernoulli from scipy.optimize import minimize_scalar# 设置中文字体 plt.rcParams[font.sans-serif] [SimHei] # 使用黑体 plt.rcParams[axes.…...

IPv4编址及IPv4路由基础

一、实验目的 掌握接口 IPv4 地址的配置方法理解 LoopBack 接口的作用与含义理解直连路由的产生原则掌握静态路由的配置方法并理解其生效的条件掌握通过 PING 工具测试网络层连通性掌握并理解特殊静态路由的配置方法与应用场景 二、实验环境 安装有eNSP模拟器的PC一台&#…...

基于Python的机动车辆推荐及预测分析系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…...

SpringBoot扩展——发送邮件!

发送邮件 在日常工作和生活中经常会用到电子邮件。例如&#xff0c;当注册一个新账户时&#xff0c;系统会自动给注册邮箱发送一封激活邮件&#xff0c;通过邮件找回密码&#xff0c;自动批量发送活动信息等。邮箱的使用基本包括这几步&#xff1a;先打开浏览器并登录邮箱&…...

啊啊啊啊啊啊啊啊code

前序遍历和中序遍历构建二叉树 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNod…...

不同程度多径效应影响下的无线通信网络电磁信号仿真数据生成程序

生成.mat数据&#xff1a; %创建时间&#xff1a;2025年6月19日 %zhouzhichao %遍历生成不同程度多径效应影响的无线通信网络拓扑推理数据用于测试close all clearsnr 40; n 30;dataset_n 100;for bias 0.1:0.1:0.9nodes_P ones(n,1);Sampling_M 3000;%获取一帧信号及对…...

C语言学习day17-----位运算

目录 1.位运算 1.1基础知识 1.1.1定义 1.1.2用途 1.1.3软件控制硬件 1.2运算符 1.2.1与 & 1.2.2或 | 1.2.3非 ~ 1.2.4异或 ^ 1.2.5左移 << 1.2.6右移 >> 1.2.7代码实现 1.2.8置0 1.2.9置1 1.2.10不借助第三方变量&#xff0c;实现两个数的交换…...

Spring MVC参数绑定终极手册:单多参对象集合JSON文件上传精讲

我们通过浏览器访问不同的路径&#xff0c;就是在发送不同的请求&#xff0c;在发送请求时&#xff0c;可能会带一些参数&#xff0c;本文将介绍了Spring MVC中处理不同请求参数的多种方式 一、传递单个参数 接收单个参数&#xff0c;在Spring MVC中直接用方法中的参数就可以…...

宽度优先遍历(bfs)(2)——fllodfill算法

欢迎来到博主的专栏&#xff1a;算法解析 博主ID&#xff1a;代码小豪 文章目录 floodfiil算法leetcode733——图像渲染题目解析算法原理题解代码 leetcode130——被围绕的区域题目解析算法原理题解代码 floodfiil算法 floodfill算法&#xff0c;在博主这里看来则是一个区域填…...

嵌入式编译工具链熟悉与游戏移植

一、Linux 系统编译工具链使用与 mininim 源码编译 在 Ubuntu 系统上编译 mininim 开源游戏需要正确配置编译工具链和依赖库。以下是详细的操作步骤和故障解决方法&#xff1a; 1. 环境准备与源码获取 首先需要安装必要的编译工具和依赖库&#xff1a; # 更新系统软件包索引…...

STUN (Session Traversal Utilities for NAT) 服务器是一种网络协议

STUN (Session Traversal Utilities for NAT) 服务器是一种网络协议&#xff0c;主要用于帮助位于网络地址转换 (NAT) 设备&#xff08;如路由器&#xff09;后面的客户端发现自己的公共 IP 地址和端口号。这对于建立点对点 (P2P) 通信至关重要&#xff0c;尤其是在 VoIP&#…...

Transformer结构介绍

[编码器 Encoder] ←→ [解码器 Decoder] 编码器&#xff1a; 输入&#xff1a;源语言序列输出&#xff1a;每个词的上下文表示(embedding) 解码器&#xff1a;输入&#xff1a;目标语言序列编码器输出输出&#xff1a;下一个词的概率分布&#xff08;目标句子生成&#xff09…...

SpringBoot扩展——应用Web Service!

应用Web Service Web Service是一个SOA&#xff08;面向服务的编程&#xff09;架构&#xff0c;这种架构不依赖于语言&#xff0c;不依赖于平台&#xff0c;可以在不同的语言之间相互调用&#xff0c;通过Internet实现基于HTTP的网络应用间的交互调用。Web Service是一个可以…...

5G核心网周期性注册更新机制:信令流程与字段解析

一、周期性注册更新的技术背景与流程概述 1.1 注册更新的核心目的 在5G网络中,UE通过周期性注册更新维持与核心网的连接状态,主要作用包括: 状态保活:避免AMF因超时而释放UE上下文(T3512定时器超时前需完成更新);位置更新:通知网络UE的当前位置,确保寻呼可达;能力同…...

【LLM学习笔记3】搭建基于chatgpt的问答系统(下)

目录 一、检查结果检查有害内容检查是否符合产品信息 二、搭建一个简单的问答系统三、评估输出1.当存在一个简单的正确答案2.当不存在一个简单的正确答案 一、检查结果 本章将引领你了解如何评估系统生成的输出。在任何场景中&#xff0c;无论是自动化流程还是其他环境&#x…...

算法导论第十九章 并行算法:解锁计算新维度

第十九章 并行算法&#xff1a;解锁计算新维度 “并行计算不是未来&#xff0c;而是现在。” —— David Patterson 在单核性能增长放缓的时代&#xff0c;并行算法成为突破计算极限的关键。本章将带你探索多核处理器、分布式系统和GPU加速的奇妙世界&#xff0c;揭示如何通过协…...

Python 数据分析与可视化 Day 1 - Pandas 数据分析基础入门

&#x1f3af; 今日目标 理解 Pandas 的作用和核心概念学会创建 Series 和 DataFrame掌握基本数据读取&#xff08;CSV&#xff09;与常用查看方法 &#x1f9f0; 1. 什么是 Pandas&#xff1f; Pandas 是基于 NumPy 的强大数据分析库&#xff0c;提供了灵活的表格数据结构 Da…...

【数字人开发】Unity+百度智能云平台实现长短文本个性化语音生成功能

一、创建自己的应用 百度智能云控制台网址&#xff1a;https://console.bce.baidu.com/ 1、创建应用 2、获取APIKey和SecretKey 3、Api调试 调试网址&#xff1a;https://console.bce.baidu.com/support/?timestamp1750317430400#/api?productAI&project%E8%AF%AD%E9%…...

(哈希)128. 最长连续序列

题目 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [100,4,200,1,3,2] 输出&#xff…...

MFC中使用CRichEditCtrl控件让文本框中的内容部分加粗

MFC中文本框控件的内容&#xff0c;设置好字体格式后&#xff0c;只能单一的显示&#xff0c;如果相对文本框的内容部分加粗&#xff0c;或者部分加颜色、链接等都无法实现&#xff0c;但MFC中提供了CRichEditCtrl控件&#xff0c;就很方便的实现文本框中部分内容需要特殊处理的…...

Redis 的优势有哪些,它是CP 还是 AP?CAP 理论又是什么?

Redis的核心优势 Redis作为当今最流行的内存数据库之一&#xff0c;具有以下显著优势&#xff1a; 1. 卓越的性能表现 内存存储&#xff1a;数据主要存储在内存中&#xff0c;读写速度极快&#xff08;10万 QPS&#xff09;单线程架构&#xff1a;避免多线程竞争&#xff0c…...

flink的多种部署模式

## 部署模式和运行模式 ### 部署模式 - 本地local - 单机无需分布式资源管理 - 集群 - 独立集群standalone - 需要flink自身的任务管理工具 - jobmanager接收和调度任务 - taskmanager执行 - on其他资源管理工具yarn/k8s …...

SQL分片工具类

SQL分片工具类(SqlShardingUtil)提供数据库查询的智能分片功能&#xff0c;支持数字和字符串两种字段类型的分片策略。对于数字字段&#xff0c;可以指定分片数量均匀划分数值区间&#xff1b;对于字符串字段&#xff0c;则按照ASCII字符范围自动划分。工具类确保分片后的SQL语…...

死锁相关知识

死锁是什么 死锁&#xff08;Deadlock&#xff09;是指两个或多个进程&#xff08;或线程&#xff09;在执行过程中&#xff0c;因为互相等待对方释放资源&#xff0c;导致永远无法继续执行的状态。 ✅ 死锁的形成条件&#xff08;必须同时满足以下四个&#xff09;&#xff1…...

oscp靶机练习PG Reconstruction

枚举阶段 nmap -A -T4 -p- -Pn -n 192.168.217.103 发现ftp&#xff0c;进行连接枚举 都下载到本地 这里提示我们两点&#xff0c;可以看看pcap文件&#xff0c;还有就是可能有密码遗留还没有删除。 使用下面命令进行过滤筛选流量包&#xff0c;查看与密码相关 http.reque…...

写题。贪心题组

一、 解题思路&#xff1a;主要还是写出val / m&#xff0c;按这个排序&#xff0c;就行了 #include<bits/stdc.h> #define endl "\n" #define ll long long #define pii pair<int,int> using namespace std;struct doro {int m, val;double cmp; } arr…...

UE官方文档学习 TAarry 查询

这个很简单经常用。 二.GetData() . GetData()&#xff0c;像C里拿到数组首地址一样。它不具有越界保护机制&#xff0c;StrArr拥有越界保护机制。这个地址在数组不做改变&#xff0c;如扩容等有用。 void AWXArrayActor::WXFindArray() {TArray<FString> StrArr { &q…...

使用Haproxy搭建Web群集

LVS负载均衡群集 Haproxy介绍http请求负载均衡常用调度算法常见的web群集调度器 示例操作安装httpd&#xff08;两台网站服务器操作一致&#xff09;编译安装haproxyhaproxy服务器配置(1)建立haproxy的配置文件(2)修改haproxy.cfg配置文件 测试haproxy的日志(1)修改 haproxy 配…...

Linux 基础命令:`ls`、`cd`、`du` 快速入门

在 Linux 系统中&#xff0c;ls、cd 和 du 是日常操作中最常用的三个命令。掌握它们能大幅提升文件管理效率。 1. ls&#xff1a;查看目录内容 用途&#xff1a;列出当前或指定目录下的文件和子目录。 常用命令&#xff1a; ls -l # 详细列表&#xff08;权限、大…...

[论文阅读] 人工智能 + 软件工程 | USEagent:迈向统一的AI软件工程师

论文信息 article{applis2025unified,title{Unified Software Engineering agent as AI Software Engineer},author{Applis, Leonhard and Jiang, Nan and Zhang, Yuntong and Tan, Lin and Liang, Shanchao and Roychoudhury, Abhik},journal{arXiv preprint arXiv:2506.1468…...

微信小程序传参过来了,但是数据没有获取到

使用本方法前&#xff0c;已经采用encodeURIComponent把拼接的参数编码之后&#xff0c;拼接在链接上&#xff0c;在接受的页面的onLoad生命周期&#xff0c;接收到参数之后&#xff0c;采用decodeURIComponent进行解码的操作&#xff0c;如果这个也不行&#xff0c;不是说不行…...