真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

RustTrait簡介-創(chuàng)新互聯(lián)

Rust trait簡介

內(nèi)容總結(jié)自《The Rust Programing Language》

站在用戶的角度思考問題,與客戶深入溝通,找到邗江網(wǎng)站設(shè)計與邗江網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:做網(wǎng)站、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋邗江地區(qū)。

首先簡單說一下泛型:這個基礎(chǔ)和C++的模板大概類似,從語法編譯層面提供一種接收任意類型的手段,需要知道的是泛型在編譯時會進(jìn)行單態(tài)化處理,所以泛型是不會增加運(yùn)行時負(fù)擔(dān)的。熟悉C++的前提下,泛型應(yīng)該是看一下就可以很快入門,這里不贅述。

trait定義

Rust通過 trait 以一種抽象的方式定義共享的行為??梢允褂?em>trait bounds指定泛型是任何擁有特定行為的類型,trait就類似其他語言的接口。trait 定義就是一種將方法簽名組合起來的方法,目的是定義一個實現(xiàn)某些目的所必需的行為的集合。

貼一下相干性的概念:(感覺是常識)

不能為外部類型實現(xiàn)外部 trait。例如,不能在aggregatorcrate 中為Vec實現(xiàn)Displaytrait。這是因為DisplayVec都定義于標(biāo)準(zhǔn)庫中,它們并不位于aggregatorcrate 本地作用域中。這個限制是被稱為 相干性(coherence) 的程序?qū)傩缘囊徊糠?,或者更具體的說是 孤兒規(guī)則(orphan rule),其得名于不存在父類型。這條規(guī)則確保了其他人編寫的代碼不會破壞你代碼,反之亦然。

//trait定義的簡單例子
pub trait Summary {fn summarize_author(&self) ->String;
	//trait方法支持默認(rèn)實現(xiàn)
    fn summarize(&self) ->String {format!("(Read more from {}...)", self.summarize_author())
    }
}
pub struct Tweet {pub username: String,
    pub content: String,
    pub reply: bool,
    pub retweet: bool,
}

impl Summary for Tweet {fn summarize_author(&self) ->String {format!("@{}", self.username)
    }
}

let tweet = Tweet {username: String::from("horse_ebooks"),
    content: String::from("of course, as you probably already know, people"),
    reply: false,
    retweet: false,
};

println!("1 new tweet: {}", tweet.summarize());
trait適用場景

使用 trait 來接受多種不同類型的參數(shù)。

//該函數(shù)接收一個trait參數(shù),那么只要是實現(xiàn)(impl)了Summary的類型都是有效參數(shù)
pub fn notify(item: impl Summary) {println!("Breaking news! {}", item.summarize());
}

//trait語法糖 trait bound

//這里強(qiáng)制item1,item2必須是相同的具體類型
pub fn notify(item1: T, item2: T) {//使用+號可以同時實現(xiàn)多個trait
pub fn notify(item: impl Summary + Display) {}//impl寫法
pub fn notify(item: T) {}//trait bound寫法

//通過where簡化trait bound
//顯得雜亂無章
fn some_function(t: T, u: U) ->i32 {}
//使用where之后好看多了
fn some_function(t: T, u: U) ->i32
    where T: Display + Clone,
          U: Clone + Debug
{}

//一個使用trait boud編寫函數(shù)的例子
fn largest(list: &[T]) ->T {let mut largest = list[0];

    for &item in list.iter() {if item >largest {largest = item;
        }
    }

    largest
}

//使用trait bound有條件的實現(xiàn)
//通過使用帶有 trait bound 的泛型參數(shù)的 impl 塊,可以有條件地只為那些實現(xiàn)了特定 trait 的類型實現(xiàn)方法。
//示例中的類型 Pair總是實現(xiàn)了 new 方法,
//不過只有那些為 T 類型實現(xiàn)了 PartialOrd trait (來允許比較) 
//和 Display trait (來啟用打?。┑?Pair才會實現(xiàn) cmp_display 方法:
#![allow(unused)]
fn main() {use std::fmt::Display;

struct Pair{x: T,
    y: T,
}

implPair{fn new(x: T, y: T) ->Self {Self {x,
            y,
        }
    }
}

implPair{fn cmp_display(&self) {if self.x >= self.y {println!("The largest member is x = {}", self.x);
        } else {println!("The largest member is y = {}", self.y);
        }
    }
}
}

trait 和 trait bound 讓我們使用泛型類型參數(shù)來減少重復(fù),并仍然能夠向編譯器明確指定泛型類型需要擁有哪些行為。因為我們向編譯器提供了 trait bound 信息,它就可以檢查代碼中所用到的具體類型是否提供了正確的行為。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


文章題目:RustTrait簡介-創(chuàng)新互聯(lián)
地址分享:http://weahome.cn/article/gpeds.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部