【unitrix】 6.5 基础整数类型特征(base_int.rs)

一、源码

这段代码定义了一个名为 BaseInt 的 trait(特征),用于标记基础整数类型,并为其实现基本的算术运算和常见 trait。然后,它为标准 Rust 整数类型(如 i8、i16、i32 等)实现了这个 trait。

rust 复制代码
use core::ops::{Neg, Add, Sub, Mul, Div, AddAssign, SubAssign};
use crate::number::BaseNumber;
/// 基础整数类型标记特征
/// 
/// 要求实现基本算术运算和常见特征
pub trait BaseInt:
    BaseNumber +
    Neg +
    Add<Output = Self> +
    Sub<Output = Self> +
    Mul<Output = Self> +
    Div<Output = Self> +
    AddAssign +
    SubAssign +
    Copy +
    Clone +
    Default +
    Sized +
    'static
{}

// 为标准整数类型实现BaseInt
impl BaseInt for i8 {}
impl BaseInt for i16 {}
impl BaseInt for i32 {}
impl BaseInt for i64 {}
impl BaseInt for i128 {}
impl BaseInt for isize {}

二、代码解析

  1. 导入依赖
rust 复制代码
use core::ops::{Neg, Add, Sub, Mul, Div, AddAssign, SubAssign};
use crate::number::BaseNumber;
  • core::ops:从 Rust 的核心库导入运算符 trait,包括:

    • Neg(取负 -)

    • Add(加法 +)

    • Sub(减法 -)

    • Mul(乘法 *)

    • Div(除法 /)

    • AddAssign(+=)

    • SubAssign(-=)

  • BaseNumber:从当前 crate 导入 BaseNumber trait,是更基础的数值类型约束(如 Copy、Sized 等)。

  1. 定义 BaseInt trait
rust 复制代码
pub trait BaseInt:
    BaseNumber +
    Neg +
    Add<Output = Self> +
    Sub<Output = Self> +
    Mul<Output = Self> +
    Div<Output = Self> +
    AddAssign +
    SubAssign +
    Copy +
    Clone +
    Default +
    Sized +
    'static
{}

BaseInt 是一个 trait bound(特征约束),它要求所有实现它的类型必须满足以下条件:

  1. 继承 BaseNumber(更基础的数值 trait)。
  2. 支持算术运算:
  • Neg(取负 -x)

  • Add(加法 x + y,返回 Self)

  • Sub(减法 x - y,返回 Self)

  • Mul(乘法 x * y,返回 Self)

  • Div(除法 x / y,返回 Self)

  • AddAssign(x += y)

  • SubAssign(x -= y)

  1. 支持常见 trait:
  • Copy(按位复制)

  • Clone(显式克隆)

  • Default(默认值,如 0)

  • Sized(编译期已知大小)

  • 'static(生命周期约束,表示类型不包含非 'static 引用)

  1. 为标准整数类型实现 BaseInt
rust 复制代码
impl BaseInt for i8 {}
impl BaseInt for i16 {}
impl BaseInt for i32 {}
impl BaseInt for i64 {}
impl BaseInt for i128 {}
impl BaseInt for isize {}
  • 为 Rust 的所有标准有符号整数类型实现 BaseInt:

    • i8、i16、i32、i64、i128(固定位宽整数)

    • isize(指针大小的整数,32/64 位取决于平台)

      由于这些类型已经实现了 BaseInt 的所有约束(如 Add、Copy 等),所以 impl 块是空的,只是"标记"它们符合 BaseInt。

相关推荐
小喷友21 小时前
阶段三:进阶(Rust 高级特性)
前端·rust
Python私教1 天前
源滚滚Rust全栈班v1.02 无符号整数详解
开发语言·后端·rust
专注VB编程开发20年2 天前
CSS 的命名方式像是 PowerShell 的动词-名词结构,缺乏面向对象的层级关系
开发语言·后端·rust
伍哥的传说2 天前
Tailwind CSS v4 终极指南:体验 Rust 驱动的闪电般性能与现代化 CSS 工作流
前端·css·rust·tailwindcss·tailwind css v4·lightning css·utility-first
专注VB编程开发20年2 天前
rust语言-对象多级访问
服务器·前端·rust
编码浪子2 天前
趣味学RUST基础篇(构建一个命令行程序2重构)
开发语言·重构·rust
susnm2 天前
组件生命周期
rust·全栈
bruce541102 天前
Axum 最佳实践:如何构建优雅的 Rust 错误处理系统?(三)
rust
Source.Liu3 天前
【Python基础】 15 Rust 与 Python 基本类型对比笔记
笔记·python·rust
咸甜适中3 天前
rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(二十六)windows平台运行时隐藏控制台
笔记·学习·rust·egui