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

【PhysUnits】15.15 变量类型(variable.rs)

一、源码

这段代码定义了一个泛型结构体 Var 和相关的数学运算实现,主要用于封装数值类型并提供基本的算术运算功能。

/** 变量结构体 Var* 该结构体泛型参数 T 需满足 Numeric 约束*/use std::ops::{Neg, Add, Sub, Mul};/// 定义 Numeric trait,约束 T 必须实现基本数值运算
pub trait Numeric:Neg<Output = Self> +  Add<Output = Self> + Sub<Output = Self> + Mul<Output = Self> + Copy + Sized
{}// 为基本类型实现 Numeric
impl Numeric for i64 {}
impl Numeric for f64 {}/// 变量结构体,封装一个泛型值 T
#[derive(Debug, Clone, Copy, PartialEq, Default)]
pub struct Var<T: Numeric>(pub T);/// 实现 Var 与 Var 的乘法运算
/// V * V
impl<T: Numeric> Mul<Var<T>> for Var<T> {type Output = Self;fn mul(self, b: Self) -> Self::Output {Var(self.0 * b.0)}
}/// 实现 Var 与 Var 的加法运算
/// V + V
impl<T: Numeric> Add for Var<T> {type Output = Self;fn add(self, b: Self) -> Self::Output {Var(self.0 + b.0)}
}/// 实现 Var 的取反运算
/// -V
impl<T: Numeric> Neg for Var<T> {type Output = Self;fn neg(self) -> Self::Output {Var(-self.0)}
}/// 实现 Var 与 Var 的减法运算
/// V - V
impl<T: Numeric> Sub for Var<T> {type Output = Self;fn sub(self, b: Self) -> Self::Output {Var(self.0 - b.0)}
}

二、Numeric Trait 定义

pub trait Numeric:Neg<Output = Self> +  Add<Output = Self> + Sub<Output = Self> + Mul<Output = Self> + Copy + Sized
{}
  • 定义了一个名为 Numeric 的 trait,它要求实现该 trait 的类型必须支持以下操作:

    • 取负 (Neg): -x

    • 加法 (Add): x + y

    • 减法 (Sub): x - y

    • 乘法 (Mul): x * y

    • 可复制 (Copy trait): 允许按位复制

    • 大小固定 (Sized trait): 编译时已知大小

  • Output = Self 表示这些运算的返回值类型与自身类型相同。

三、为基本类型实现 Numeric

impl Numeric for i64 {}
impl Numeric for f64 {}
  • 为 i64 (64位整数) 和 f64 (64位浮点数) 实现了 Numeric trait,表明这些类型可以进行上述基本运算。

四、Var 结构体定义

#[derive(Debug, Clone, Copy, PartialEq, Default)]
pub struct Var<T: Numeric>(pub T);
  • 定义了一个泛型结构体 Var,其中 T 必须实现 Numeric trait。

  • 使用了元组结构体的形式,包含一个公开的字段 T。

  • 自动派生了一些常用 trait:

    • Debug: 支持格式化打印

    • Clone 和 Copy: 允许复制

    • PartialEq: 支持部分相等比较

    • Default: 提供默认值

五、运算实现

为 Var 实现了四种基本运算:

乘法 (Mul)
impl<T: Numeric> Mul<Var<T>> for Var<T> {type Output = Self;fn mul(self, b: Self) -> Self::Output {Var(self.0 * b.0)}
}
  • 实现 Var * Var 的运算

  • 返回新的 Var,其值为两个 Var 内部值的乘积

加法 (Add)
impl<T: Numeric> Add for Var<T> {type Output = Self;fn add(self, b: Self) -> Self::Output {Var(self.0 + b.0)}
}
  • 实现 Var + Var 的运算

  • 返回新的 Var,其值为两个 Var 内部值的和

取负 (Neg)
impl<T: Numeric> Neg for Var<T> {type Output = Self;fn neg(self) -> Self::Output {Var(-self.0)}
}
  • 实现 -Var 的运算

  • 返回新的 Var,其值为原 Var 内部值的负数

减法 (Sub)
impl<T: Numeric> Sub for Var<T> {type Output = Self;fn sub(self, b: Self) -> Self::Output {Var(self.0 - b.0)}
}
  • 实现 Var - Var 的运算

  • 返回新的 Var,其值为两个 Var 内部值的差

六、总结

这段代码创建了一个通用的数值包装类型 Var,它可以封装任何实现了基本算术运算的类型(目前是 i64 和 f64),并为这些包装值提供了加减乘和取负运算的能力。这种设计在需要统一处理不同数值类型或需要为数值添加额外功能的场景中很有用。

相关文章:

  • 【SSM】SpringBoot学习笔记1:SpringBoot快速入门
  • 链表相关知识
  • python技巧:pyvisa打开hislip设备;IEEE 488.2
  • 一日总结0605
  • Spring MVC 之 异常处理
  • 腾讯云服务器端口怎么全部打开?CVM和轻量端口开通教程
  • w10激活方法
  • Java中线程创建的三种方式
  • Java 9 新特性全整理
  • 快递电子面单便宜吗?怎样申请呢
  • 短视频矩阵系统技术saas源头6年开发构架
  • Python使用总结之Mac安装docker并配置wechaty
  • 鸿蒙Next开发真机调试签名申请流程
  • 基于eclipse进行Birt报表开发
  • 轨道交通可视化,赋能智慧车站运维
  • NumPy 比较、掩码与布尔逻辑
  • UDP:简洁高效的报文结构解析与关键注意事项
  • 45、web实验-抽取公共页面
  • 电商实践 基于token防止订单重复创建
  • Python基于方差-协方差方法实现投资组合风险管理的VaR与ES模型项目实战
  • 自己建网站做推广/宁德seo培训
  • wordpress文章分组授权/百度seo运营工作内容
  • 做ppt会去什么网站找图/百度平台推广
  • .org做商业网站/免费访问国外网站的app
  • 内容网站管理系统/宁波seo排名公司
  • 一个教做网页的网站/潮州seo