美文网首页
rust--trait的默认泛型参数

rust--trait的默认泛型参数

作者: 极光火狐狸 | 来源:发表于2018-08-31 15:11 被阅读194次
// 泛型默认参数
//
// 语法形式
// trait FlyInterface<RHS=Self> {                   // 这里定义了一个默认泛型类型
//     fn flap_wings(&self, rhs; RHS) -> &str;      // 这里使用了默认泛型类型
// }
//
// 既然说是泛型, 那么它的本质就是可以接受任意类型, 只不过默认是Self自身.
// 额外补充: 虽然flap_wings方法顶了一个rhs参数名, 但是在做实现的时候,
//           并不是必须得叫rhs参数名, rust只要求数量一致就行了.


fn example1() {
    use std::ops::Add;

    #[derive(Debug)]
    struct Millimeters(u32);
    struct Meters(u32);

    // Add是标准库中的trait, 由于 Add 的 <RHS=Self> 是泛型参数, 因此
    // 在这里做具体得实现时, 可以填写具体的类型来覆盖掉默认类型参数.
    impl Add<Meters> for Millimeters {
        type Output = Millimeters;

        // 只需要确认这里的类型参数与覆盖参数一致即可
        fn add(self, other: Meters) -> Millimeters {
            Millimeters(self.0 + (other.0 * 1000))
        }
    }

    let mm = Millimeters(15);
    let m = Meters(20);
    println!("{:?}", mm + m);
}


fn example2() {

    trait ABC<RHS=Self> {
        type Item;
        fn next(&self, rhs: RHS) -> String;
    }

    #[allow(dead_code)]
    struct Point {
        x: i32,
        y: i32
    }

    // 由于 ABC 的 <RHS=Self>是泛型参数, 因此
    // 在这里做具体得实现时, 可以填写具体的类型来覆盖掉默认类型参数.
    impl ABC<u32> for Point {
        type Item = i32;

        // 只需要确认这里的类型参数与覆盖参数一致即可
        fn next(&self, sd: u32) -> String {
            {sd};  // 这行代码没有任何意义.
            String::from("ok")
        }
    }


    let u = Point {x: 1, y: 2};

    println!("{:?}", u.next(10));
}


fn main() {
    example1();
    example2();
}

相关文章

  • rust--trait的默认泛型参数

  • 泛型auto

    泛型auto 重载 默认参数

  • 泛型学习

    1.泛型是Java中参数化类型的方式。将类型也作为一种参数进行传递。2.它有泛型的方法,泛型参数,泛型类。3.泛型...

  • go 泛型

    go 泛型 1. 类型参数(Type parameters) Go语言的泛型(Generic)叫做类型参数。泛型可...

  • java泛型中类型擦除的一些思考

    java泛型 java泛型介绍 java泛型的参数只可以代表类,不能代表个别对象。由于java泛型的类型参数之实际...

  • java的泛型

    泛型,就是参数化类型的意思,具体表现为泛型类,泛型接口,泛型方法。 泛型主要用于编译过程不确定参数可能的类型,需要...

  • Swift Tour Learn (十二) -- Swift 语

    本章将会介绍 泛型所解决的问题泛型函数类型参数命名类型参数泛型类型扩展一个泛型类型类型约束关联类型泛型 Where...

  • fun (函数)

    关键字 中缀符号 参数 默认参数 命名参数 不带返回值的参数 单表达式函数 变长参数 函数范围局部函数成员函数泛型...

  • Java 泛型

    泛型类 例如 泛型接口 例如 泛型通配符 泛型方法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型上下边...

  • Java泛型

    泛型的好处(为什么需要用泛型): 泛型实际是参数化的泛型。为什么需要泛型?1、适用于多种数据类型的变量参数,执行一...

网友评论

      本文标题:rust--trait的默认泛型参数

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