Rust:Trait 详解
生活随笔
收集整理的這篇文章主要介紹了
Rust:Trait 详解
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Rust語言里不同的type(比如 struct, enum等)可以調(diào)用的函數(shù)主要包括本身實(shí)現(xiàn)的方法。此外,Rust也提供了trait來定義不同type所需的“common behavior”,以此簡化代碼。
1. 基本內(nèi)容
定義trait:
一個(gè)trait里面可以包含多個(gè)method
trait Behavior {fn eat(&self){println!("真香")}fn make_sound(&self);}對type實(shí)現(xiàn)trait:
以strcut為例,對struct實(shí)現(xiàn)trait,方式與實(shí)現(xiàn)struct方法類似。實(shí)現(xiàn)時(shí)可以選擇 重寫trait中的method,也可以選擇不重寫,直接使用trait中默認(rèn)的method定義
struct Dog; impl Behavior for Dog {fn make_sound(&self) {println!("汪!")} } struct Cat; impl Behavior for Cat {fn make_sound(&self) {println!("喵~")} }結(jié)果:
實(shí)例化struct,調(diào)用trait
fn main(){let dog = Dog;let cat = Cat;dog.eat();dog.make_sound();cat.eat();cat.make_sound(); } 真香 汪! 真香 喵~2. 一些高級玩法
把trait作為參數(shù)傳給函數(shù),讓函數(shù)可以處理不同的type
fn feed(item: impl Behavior) {item.eat();}feed(item:dog); 真香不過,feed(item:impl Behavior)是簡略寫法,是種語法糖。完整的形式是:
fn feed<T: Behavior>(item: T) {item.eat();}這也被稱作 trait bond。
可以在函數(shù)里綁定多個(gè)type
//語法糖 fn feed(item1:impl Behavior,item1:impl Behavior) {//等價(jià)寫法 fn feed<T: Behavior>(item1: T, item2: T){一個(gè)type綁定多個(gè)trait
fn feed(item: impl Summary + Display) {//等價(jià) fn feed<T: Summary + Display>(item: T) {總結(jié)
以上是生活随笔為你收集整理的Rust:Trait 详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爬虫写得好,牢饭吃到饱?
- 下一篇: 坐姿: