【学Rust写CAD】19 颜色渐变定义(gradient_stop.rs)

源码

rust 复制代码
//color/gradient_stop.rs
use super::argb::Color;
#[derive(Clone, Copy, Debug)]
pub struct GradientStop {
    pub position: f32,
    pub color: Color,
}

代码分析

这段代码是一个结构体(struct),并为其派生(derive)了几个 trait。我来逐步解释:

结构体定义
rust 复制代码
pub struct GradientStop {
    pub position: f32,
    pub color: Color,
}

定义了一个名为 GradientStop 的公开结构体,包含两个字段:

  1. position: 一个公开的 32 位浮点数(f32),表示渐变停止点的位置(通常在 0.0 到 1.0 之间)

  2. color: 一个公开的 Color 类型,表示该位置的颜色

派生属性
rust 复制代码
#[derive(Clone, Copy, Debug)]

这是 Rust 的派生宏,自动为结构体实现以下几个 trait:

  1. Clone: 允许通过 .clone() 方法显式创建值的副本
  • 例如:let stop2 = stop1.clone();
  1. Copy: 表示类型可以通过简单的位复制来复制(而不是移动语义)
  • 这使得该类型在赋值或传参时会自动复制而不是转移所有权

  • 例如:let stop2 = stop1; 之后,stop1 仍然可用

  1. Debug: 允许使用 {:?} 或 {:#?} 格式化字符串打印该类型的调试信息
  • 例如:println!("{:?}", gradient_stop);
整体含义

这个结构体表示渐变中的一个颜色停止点,包含:

  • 该点在渐变中的位置(position)

  • 该点对应的颜色(color)

通过派生这些 trait,使得这个结构体可以:

  • 被方便地复制(适合小型的、简单的数据类型)

  • 在调试时打印出内容

  • 保留了 Rust 的所有权系统要求的语义

这种结构通常用于图形编程中的渐变定义,比如线性渐变或径向渐变的颜色停止点。

相关推荐
星释13 小时前
Rust 练习册 :Pig Latin与语言游戏
游戏·rust·c#
2301_7951672013 小时前
玩转Rust高级应用 如何让让运算符支持自定义类型,通过运算符重载的方式是针对自定义类型吗?
开发语言·后端·算法·安全·rust
ftpeak16 小时前
《Rust+Slint:跨平台GUI应用》第八章 窗体
开发语言·ui·rust·slint
百锦再19 小时前
第10章 错误处理
java·git·ai·rust·go·错误·pathon
2301_7951672020 小时前
玩转Rust高级应用. ToOwned trait 提供的是一种更“泛化”的Clone 的功能,Clone一般是从&T类型变量创造一个新的T类型变量
开发语言·后端·rust
星释21 小时前
Rust 练习册 :Phone Number与电话号码处理
开发语言·机器学习·rust
2301_7965125221 小时前
Rust编程学习 - 问号运算符会return一个Result 类型,但是如何使用main函数中使用问号运算符
开发语言·学习·算法·rust
星释1 天前
Rust 练习册 :Poker与扑克牌游戏
开发语言·游戏·rust
2301_795167201 天前
玩转Rust高级应用 如何避免对空指针做“解引用”操作,在C/C++ 里面就是未定义行为
c语言·c++·rust
星释1 天前
Rust 练习册 :Leap与日期计算
开发语言·后端·rust