【PhysUnits】4.2 Integer Trait
一、源码
该代码定义了一个名为 Integer 的 trait(特征),用于表示整数类型的基本功能。
use crate::sealed::Sealed;/// 整数类型特征 trait
///
/// 这个 trait 定义了所有整数类型需要实现的基本功能,
/// 包括关联常量和类型转换方法。
///
/// # 约束
/// - 实现了 `Sealed` trait(密封模式,限制实现范围)
/// - 实现了 `Copy` trait(允许按位复制)
/// - 实现了 `Default` trait(提供默认值)
/// - 具有 `'static` 生命周期(不包含非静态引用)
pub trait Integer: Sealed + Copy + Default + 'static {/// 有符号32位整数类型的关联常量/// /// 每个实现此 trait 的类型需要提供自己的 I32 常量值。/// 这个常量通常表示该类型在i32上下文中的表示。const I32: i32;/// 将当前类型转换为有符号32位整数/// /// # 返回/// 返回当前类型对应的i32值。/// /// # 注意/// 这是一个关联函数,不是实例方法,因为它没有 `self` 参数。/// 调用方式为 `Type::to_i32()` 而不是 `instance.to_i32()`。fn to_i32() -> i32;/// 将当前值转换为i32fn as_i32(self) -> i32;
}
二、基本结构
pub trait Integer: Sealed + Copy + Default + 'static {// 关联常量和方法
}
这个 trait 有以下几个特点:
-
是公开的 (pub) 所以可以被其他模块使用
-
要求所有实现该 trait 的类型必须同时实现 Sealed、Copy、Default trait 并且有 'static 生命周期
三、Trait 约束
-
Sealed: 使用密封模式限制 trait 的实现范围,只有当前 crate 可以实现这个 trait
-
Copy: 允许类型按位复制(值语义)
-
Default: 提供类型的默认值(如 0 对于整数)
-
'static: 保证类型不包含非静态引用
四、关联常量
const I32: i32;
每个实现 Integer 的类型必须提供一个关联常量 I32,表示该类型在 i32 上下文中的表示。
五、方法
- fn to_i32() -> i32:
-
这是一个关联函数(没有 self 参数)
-
用于将类型本身(不是实例)转换为 i32
-
调用方式:Type::to_i32()
- fn as_i32(self) -> i32:
-
这是一个实例方法(接收 self 参数)
-
用于将类型的实例转换为 i32
-
调用方式:instance.as_i32()
六、使用场景
这个 trait 可用于需要统一处理多种整数类型的场景,比如:
-
序列化/反序列化
-
跨语言接口
-
通用数学运算
通过这个 trait,可以编写泛型代码来处理所有实现了 Integer 的类型,同时保证类型安全和实现可控。