// К коду выше...
fn напечатать_обзор(a: &dyn Обзор) {
println!("{}", a.обзор());
}
напечатать_обзор(&повесть); // Печатает: Мемуары, Вася
// А также, если такие объекты определены:
напечатать_обзор(&инструкция);
напечатать_обзор(&смс);
напечатать_обзор(&карта);
напечатать_обзор(&газета);
当然,我建议原始来源:https ://doc.rust-lang.org/book/ch10-02-traits.html 。简而言之,trait(英语特质、特质、技能)——定义了特定类型所具有的功能,以及它与其他类型所共有的功能。
从个人经验来看,
trait
Rust 与@protocol
Objective-C 类似。并且文档说 trait 类似于其他语言的接口。最简单的例子:
打印输出:回忆录,Vasya
假设您在某个时候创建了其他类型(
Инструкция
,СМС
,Карта
,Газета
)。他们中的任何一个人都可以拥有这种“技能”。更重要的是,Rust 有一个
lifetime
我在任何其他语言中都没有见过的概念(“寿命”)(也许它存在于某个地方)。Rust 缺少经典 OOP 的一个重要特性——它没有继承!那些。没有祖宗关系。一切都是通过trait
s 定义的。但是,您可以通过添加新内容来创建不同“技能”的集合。这是一个现实生活中的例子:
这有点像某种“继承”(inheritance)。但是,Rust 本身并没有这样的概念。
非常(就使用而言,甚至可能是最重要的一点)是特征对象。https://doc.rust-lang.org/reference/types/trait-object.html
关于“超级能力”(超级特质)的补充。借助它可以实现某种继承。
这是一个示例用法:
在主要功能中:
分别打印: