【Rust自学】10.3. trait Pt.1:trait的定义、约束与实现

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)

题外话:trait的概念非常非常非常重要!!!整个第10章全都是Rust的重难点!!!
请添加图片描述

10.3.1. 什么是trait

trait意为特征、特质。trait用来向Rust编译器描述某种类型具有哪些并且可以与其它类型共享的功能。trait可以以抽象的方式来定义共享的行为。

与trait相关的还有trait bounds(约束)的概念,它可以将泛型类型参数指定为实现了特定行为的类型。换句话说就是要求泛型的类型参数实现了某些triat。

Rust里的trait与其他语言的接口(interface)有点类似,但还是有区别的。

10.3.2. 定义一个trait

类型的行为由该类型本身可调用的方法来组成。有时候在不同的类型上都具有相同的方法,这时候就称这些类型共享了相同的行为。trait提供了一种方式可以把一些方法放到一起,从而定义实现某种目的所必需的一种行为。

  • 定义trait使用关键字trait,在trait的定义内只有方法签名,没有具体实现
  • trait可以有多个方法,每个方法占一行,以;结尾
  • 实现该trait的类型必须提供具体的方法实现,也就是必须有方法体

看个例子:

pub trait Summary {
   
   
    fn summarize(&self) -> String;
}

trait前面加上pub代表公共的,这个trait的名字是Summary,里面有一个方法的签名叫summerize,除了&self之外没有其他参数,返回类型是String,然后加一个;就结束了这个签名,它没有方法体,也就是没有具体的实现。当然一个trait下可以有很多个方法签名:

pub trait Summary {
   
   
    fn summarize(&self) -> String;
    fn summarize1(&self) -> String;
    fn summarize2(&self) -> String;
    //......
}

10.3.3. 在类型上实现trait

在类型上实现trait与为类型实现方法很类似,但是也有不同之处。

为类型实现方法的写法是impl关键字后面跟着类型就可以了:

impl Yyyy {
   
   ....}

而在类型上实现trait的写法是:

impl Xxxx for Yyyy {
   
   ....}
  • Xxxx指的是trait的名
  • Yyyy指的是类型的名
  • 在花括号内需要对trait里的方法签名写下具体的实现

看个例子(lib.rs):

pub trait Summary {
   
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值