Rust编程与项目实战-特质(Trait)

【图书介绍】《Rust编程与项目实战》-优快云博客

《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com)

Rust编程与项目实战_夏天又到了的博客-优快云博客

特质(Trait)是Rust中的概念,类似于其他语言中的接口(Interface)。trait定义了一个可以被共享的行为,只要实现了trait,就能使用该行为。

如果不同的类型具有相同的行为,就可以定义一个trait,然后为这些类型实现该trait。定义trait是把一些方法组合在一起,目的是定义一个实现某些目标所必需的行为的集合。例如,现在有圆形和长方形两个结构体,它们都可以拥有周长和面积。因此,我们可以定义被共享的行为,只要实现了trait就可以使用。

pub trait Figure {                    // 为几何图形定义名为Figure的trait

    fn girth(&self) -> u64;           // 计算周长

    fn area(&self) -> u64;            // 计算面积

}

这里使用trait关键字来声明一个trait,Figure是trait名。在花括号中定义了该trait的所有方法,在这个例子中有两个方法,分别是fn girth(&self) -> u64;和fn area(&self) -> u64;,trait只定义行为看起来是什么样的,而不定义行为具体是什么样的。因此,我们只定义trait方法的签名,而不进行实现,此时方法签名结尾是“;”,而不是一个 {}。

接下来,每一个实现这个trait的类型都需要具体实现该trait的相应方法,编译器也会确保任何实现Figure trait的类型都拥有与fn girth(&self) -> u64;和fn area(&self) -> u64;签名的定义完全一致的方法。

Rust语言中的物质是非常重要的概念。在Rust中,物质这个概念承担了多种职责,熟悉C++的同学看到这里,会觉得物质和C++的纯虚函数非常类似,而熟悉Go语言的同学看到这里会觉得和Go语言的接口非常类似。但物质的职责远比接口多。物质中可以包含函数、常量、类型等。

8.5.1  成员方法

我们在trait中定义了一个成员方法,代码如下:

trait Shape {

    fn area(&self) -> f64;

}

所有的trait中都有一个隐藏的类型S

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值