美文网首页rust
Rust学习——关联类型

Rust学习——关联类型

作者: P2501 | 来源:发表于2020-12-22 15:27 被阅读0次

所面对的问题:trait泛型 与 所关联的对象的具体类型,解决目标类型涉及泛型类别较多的情况,使代码更具可读性
关联类型定义:一个将类型占位符与 trait 相关联的方式,这样 trait 的方法签名中就可以使用这些占位符类型。trait 的实现者会针对特定的实现在这个类型的位置指定相应的具体类型。如此可以定义一个使用多种类型的 trait,直到实现此 trait 时都无需知道这些类型具体是什么。
此外,关联类型只能在impl trait 时对同一个对象实现一次,而泛型则可以对同一个对象实现多次。

// 定义trait,以及实际目标类型可能涉及的类型
pub trait Watch {
    type Item;
    fn inner(&self) -> Option<Self::Item>;
}

// 定义目标类型
struct A {
    data: i32,
}

// 在对象上实现trait,并将实际数据类型涉及的类型与trait预设的关联类型连接
impl Watch for A {
    // 栈类型,自动copy
    type Item = i32;
    // (Self)指:A;(type Item = i32)指:将与A相关联的类型放入类型占位符<Item>之中
    fn inner(&self) -> Option<Self::Item> {   
        Some(self.data)
    }
}

// 定义新的目标类型
struct B {
    data: String,
}

// 同理
impl Watch for B {
     // 堆类型,需clone
    type Item = String;
    fn inner(&self) -> Option<Self::Item> {
        Some(self.data.clone())
    }
}

// 调用 
fn main() {
    // 新建A对象
    let a = A{data: 10};
    // 新建B对象
    let b = B{data: String::from("B")};

    assert_eq!(Some(10), a.inner());
    assert_eq!(Some(String::from("B")), b.inner());
}

trait 中的泛型与关联类型,有如下区别:

  • 如果 trait 中包含泛型参数,那么,可以对同一个目标类型,多次 impl 此 trait,每次提供不同的泛型参数。而关联类型方式只允许对目标类型实现一次。
  • 如果 trait 中包含泛型参数,那么在具体方法调用的时候,必须加以类型标注以明确使用的是哪一个具体的实现。而关联类型方式具体调用时不需要标注类型(因为不存在模棱两可的情况)。
    https://blog.csdn.net/u012067469/article/details/103725084

相关文章

  • Rust学习——关联类型

    所面对的问题:trait泛型 与 所关联的对象的具体类型,解决目标类型涉及泛型类别较多的情况,使代码更具可读性关联...

  • Rust 泛型及关联类型

    与其用它语言一样Rust也支持泛型,这里记录仪一下泛型的用法、特别是关联类型associated type.泛型系...

  • RUST 学习日记 第9课 ——输入与输出

    RUST 学习日记 第9课 ——输入与输出 0x00 回顾 上一节主要讲解了Rust中的数值类型进行类型转换的一...

  • Rust: String vs &str

    Rust: String vs &str 当你开始第一次学习Rust的时候,不知不觉中就会开始对string类型感...

  • Rust入坑指南:齐头并进(下)

    前文中我们聊了Rust如何管理线程以及如何利用Rust中的锁进行编程。今天我们继续学习并发编程, 原子类型 许多编...

  • Rust语言编程实例100题-063

    Rust语言编程实例100题-063 题目:Rust 支持元组 tuple。而且元组是一个 复合类型 。复合类型 ...

  • 读Rust程序设计语言 - 04

    语言/Rust 数据类型 - Rust 程序设计语言 简体中文版 数据类型 rust 声明的变量一定属于某一数据类...

  • Rust 学习笔记 - 原生类型

    布尔型: 布尔类型(bool)只有两个值:true 和 false: 布尔型通常用在 if 语句中, 也可以用在 ...

  • RUST 学习日记 第11课 ——向量

    RUST 学习日记 第11课 ——向量(动态数组) 0x00 回顾与开篇 上一节主要讲解了Rust的复合数据类型...

  • 2.Rust新手教程-数据类型

    学习笔记,仅此而已 Rust是静态编译语言,在编译时必须知道所有变量的类型,其中Rust内部有2套机制 基于定义的...

网友评论

    本文标题:Rust学习——关联类型

    本文链接:https://www.haomeiwen.com/subject/hndsnktx.html