trait 特性快速上手
什么是 trait
一些权威资料的描述是这样的:
Note: Traits are similar to a feature often called interfaces in other languages, although with some differences.
也就是说trait (特性)
类似于其他语言中通常称为interfaces
的功能,但存在一些差异。
OK,那作为初学者我就不求甚解,就先理解为它可以当
interface
来使用就好了
那学过其他语言,我们知道 interface
是干什么的呢?
就是定义某个类型,有那些属性、方法。
由于 Rust 是超级强类型的语言,约束比较多,trait 只允许定义方法
所以 trait
也可以这么用:
rust
// 这样定义一个叫做 AppendBar 的特性
trait AppendBar {
fn append_bar(self) -> Self;
}
实现 trait
然后就是所谓的跟interface
不一样之处了------如何把它和类型关联呢?
不过其实也就是语法不太一样
rust
// 给 String 类型实现这个特性
impl AppendBar for String {
fn append_bar(self) -> Self {
self + "Bar"
}
}
使用 trait
这样以来,之后所有String
类型的变量,都可以调用 append_bar
方法:
rust
let s = String::from("Foo");
let s = s.append_bar();
配合范型使用
如果我们无法准确描述所需要的类型,但是我们知道它必须要具备一个或者几个trait
,那就可以这么描述这个类型:
rust
fn some_func<T: SomeTrait + OtherTrait>(item: T) -> bool {
item.some_function() && item.other_function()
}
这样就用范型描述了一个同时满足SomeTrait
和OtherTrait
的类型T
。