rust 教程 07 核心trait介绍

Rust 核心 Trait 详解

1. Drop

作用: 自定义值离开作用域时的清理逻辑
Trait 定义:

pub trait Drop {
    fn drop(&mut self);
}

关键点:
• 自动调用,无法手动触发(可用 std::mem::drop 强制提前释放)
• 用于释放资源(如文件句柄、网络连接)
• 实现了 Drop 的类型不能实现 Copy
示例:

struct Resource;
impl Drop for Resource {
    fn drop(&mut self) { println!("资源释放!"); }
}

2. Sized

作用: 标记类型在编译期已知大小
Trait 特性:
• 隐式自动实现(如 i32, struct
• 未实现类型:[T](切片)、strdyn Trait
特殊用法:

fn generic<T: ?Sized>(t: &T) {} // 允许接受未定长类型

3. Clone vs Copy

Trait 区别 使用场景 示例
Clone 显式深拷贝 (x.clone()) 需资源复制的复杂类型 String, Vec<T>
Copy 隐式位复制(自动复制) 简单值类型 i32, f64, 元组(全 Copy)

代码示例:

#[derive(Clone, Copy)]
struct Point { x: i32, y: i32 } // 必须同时实现 Clone

4. Deref / DerefMut

作用: 重载解引用操作符 *.
Trait 定义:

pub trait Deref {
    type Target: ?Sized;
    fn deref(&self) -> &Self::Target;
}

关键机制:
Deref Coercion:自动转换链(如 &Box<String>&String&str
• 常用于智能指针(Box<T>, Rc<T>
示例:

struct MyBox<T>(T);
impl<T> Deref for MyBox<T> {
    type Target = T;
    fn deref(&self) -> &T { &self.0 }
}

5. Default

作用: 提供类型的默认值
Trait 方法:

pub trait Default {
    fn default() -> Self;
}

实用场景:
• 结构体更新语法:Config { timeout: 5, ..Default::default() }
• 泛型约束中初始化类型
可派生:

#[derive(Default)]
struct Config { timeout: u32 }

6. 引用转换 Trait

Trait 作用 方法 典型实现
AsRef<T> 不可变引用转换 as_ref() String&str
AsMut<T> 可变引用转换 as_mut() Vec<T>&mut [T]
Borrow<T> 借用语义等价转换 borrow() String&str
BorrowMut<T> 可变借用语义等价转换 borrow_mut() Vec<T>&mut [T]

关键区别:
Borrow 要求哈希/比较行为与原类型一致
AsRef 用于通用引用转换,无行为一致性要求


7. 类型转换 Trait

(1) 无错误转换

Trait 方向 方法 示例
From<T> T → Self from() String::from("hi")
Into<T> Self → T into() let s: String = "hi".into();

(2) 可能失败的转换

Trait 错误处理 方法 典型场景
TryFrom<T> 返回 Result try_from() 数值类型窄化转换
TryInto<T> 返回 Result try_into() 字符串解析为数字

关系:
Into 自动实现当 From 存在时
TryInto 自动实现当 TryFrom 存在时


8. ToOwned

作用: 从借用数据创建拥有所有权的副本(泛化的 Clone
Trait 定义:

pub trait ToOwned {
    type Owned: Borrow<Self>;
    fn to_owned(&self) -> Self::Owned;
}

Clone 区别:
Clone 直接返回 SelfToOwned 可返回不同但能 Borrow<Self> 的类型
经典案例:

let s: &str = "hello";
let owned: String = s.to_owned(); // &str → String

核心 Trait 总结表

Trait 主要作用 关键方法/机制
Drop 资源清理 自动调用 drop()
Sized 标记编译期已知大小 隐式实现
Clone/Copy 复制语义 clone() / 隐式复制
Deref/Mut 重载解引用操作符 Deref Coercion 机制
Default 默认值初始化 default()
AsRef/Mut 通用引用转换 as_ref(), as_mut()
Borrow/Mut 语义等价借用 HashMap 的键查找
From/Into 无错误类型转换 from(), into()
TryFrom/Into 可能失败的类型转换 try_from(), try_into()
ToOwned 创建所有权副本 to_owned()
posted @ 2025-03-22 17:57  xwher  阅读(50)  评论(0)    收藏  举报