《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com)
特质(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

最低0.47元/天 解锁文章
2021

被折叠的 条评论
为什么被折叠?



