【unitrix数间混合计算】2.10 小数部分特征(bin_frac.rs)
一、源码
这段 Rust 代码定义了一个用于表示二进制小数部分的类型系统
use crate::number::{Null, NonZeroBinFrac};/// 标记合法的二进制小数部分类型
pub trait BinFrac: Default {}// 空小数部分(表示值为0)
impl BinFrac for Null {}// 非空小数部分(需满足NonZeroBinFrac约束)
impl<F: NonZeroBinFrac> BinFrac for F {}
二、代码分析
- 导入依赖:
use crate::number::{Null, NonZeroBinFrac};
- 从当前 crate 的 number 模块导入两个类型:
-
Null:表示空/终止类型(类似链表结尾的 nil)
-
NonZeroBinFrac:表示非零二进制小数的 trait
-
- Trait 定义:
/// 标记合法的二进制小数部分类型
pub trait BinFrac: Default {}
-
定义 BinFrac trait 来标记合法的二进制小数类型
-
继承 Default 表示这些类型必须能提供默认值
-
这是一个标记 trait(没有方法),仅用于类型系统
- 空实现:
// 空小数部分(表示值为0)
impl BinFrac for Null {}
-
为 Null 类型实现 BinFrac
-
表示小数部分为 0 的情况(如整数 1.0)
- 非空实现:
// 非空小数部分(需满足NonZeroBinFrac约束)impl<F: NonZeroBinFrac> BinFrac for F {}
-
为所有实现 NonZeroBinFrac 的类型 F 自动实现 BinFrac
-
表示非零的小数部分(如 0.1, 0.01 等)
-
这里使用了泛型 trait 约束
三、类型系统示例:
-
Null → 0.0
-
NonZeroBinFrac 实现类型 → 0.1、0.01 等
四、设计特点:
-
使用标记 trait 进行类型分类
-
通过 Null 处理边界情况
-
通过 trait 继承确保默认构造能力
-
泛型实现提供扩展性
这个设计常用于类型安全的数值计算,可以在编译期确保小数部分的合法性。