Rust 编程视频教程(进阶)——026_2 高级 trait2

视频地址

头条地址:https://www.ixigua.com/i6775861706447913485
B站地址:https://www.bilibili.com/video/av81202308/

源码地址

github地址:https://github.com/anonymousGiga/learn_rust

讲解内容

默认泛型类型参数和运算符重载
(1)使用泛型类型参数时,可以为泛型指定一个默认的具体类型。
(2)运算符重载是指在特定情况下自定义运算符行为的操作。Rust并不允许创建自定义运算符或者重载运算符,不过对于std::ops中列出的运算符和相应的trait,我们可以实现运算符相关trait来重载。
(3)示例
a、例子:

use std::ops::Add;
#[derive(Debug, PartialEq)]
struct Point {
	x: i32,
	y: i32,
}
impl Add for Point {
	type Output = Point;
	fn add(self, other: Point) -> Point {
		Point {
			x: self.x + other.x,
			y: self.y + other.y,
		}
	}
}
fn main() {
	assert_eq!(Point { x: 1, y: 0 } + Point { x: 2, y: 3 },
		Point { x: 3, y: 3 });
}

b、Add trait 的定义如下:

trait Add<RHS=Self> { 
	type Output; 
	fn add(self, rhs: RHS) -> Self::Output; 
}

说明:

尖括号中的 RHS=Self,这个语法叫做 默认类型参数(default type parameters)。RHS 是一个泛型类型参数(“right hand side” 的缩写),它用于定义 add 方法中的 rhs 参数。如果实现 Add trait 时不指定 RHS 的具体类型,RHS 的类型将是默认的 Self 类型,上面的例子就是在默认类型上实现的 Add 的类型。

自定义RHS的例子:

use std::ops::Add; 
struct Millimeters(u32); 
struct Meters(u32); 
impl Add<Meters> for Millimeters { 
	type Output = Millimeters; 
	fn add(self, other: Meters) -> Millimeters { 	
		Millimeters(self.0 + (other.0 * 1000))
	}
}

默认参数类型主要用于如下两个方面:

  • 扩展类型而不破坏现有代码。
  • 在大部分用户都不需要的特定情况进行自定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值