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

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

怎么使用Rust語言的類型轉(zhuǎn)換

本篇內(nèi)容介紹了“怎么使用Rust語言的類型轉(zhuǎn)換”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷策劃、微信小程序定制開發(fā)、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動互聯(lián)開發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立十載以來,已經(jīng)為1000+成都地磅秤各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的1000+客戶與我們一路同行,見證我們的成長;未來,我們一起分享成功的喜悅。

什么是類型轉(zhuǎn)換?

類型轉(zhuǎn)換,是調(diào)用函數(shù)時,根據(jù)函數(shù)要求的參數(shù)簽名類型A,將我們手中的類型B轉(zhuǎn)換為類型A的過程,而且不能改變B的所有權(quán)。一般的函數(shù)調(diào)用都要求我們傳遞引用,很少需要直接傳遞所有權(quán)的。

很多語言提供了向上轉(zhuǎn)型和向下轉(zhuǎn)型,例如Java和C++等,如此使用(B)A,即可將B強(qiáng)制轉(zhuǎn)換成A。但是強(qiáng)轉(zhuǎn)是有一定的風(fēng)險的,Java里強(qiáng)轉(zhuǎn)失敗會拋出CastException,而在C++里有時候不拋異常,必須使用更高版本的cast系列函數(shù)去轉(zhuǎn)換,才可以保證轉(zhuǎn)換失敗時給出異常,避免產(chǎn)生內(nèi)存安全的問題。

Rust雖然是各種安全風(fēng)險可控的編程語言,但是也有一些是需要開發(fā)人員事先了解的,比如整型之間強(qiáng)轉(zhuǎn)的結(jié)果并不盡如人意。

as操作符

1、在編碼過程中,使用最多的轉(zhuǎn)換,要數(shù)整型的強(qiáng)制轉(zhuǎn)換了。

我們往往會遇見這樣的類型需求usize,這個類型一般代指長度或者數(shù)組索引,我們只有i32之類的整型變量是不能直接透傳進(jìn)去的,必須使用as關(guān)鍵字作強(qiáng)制轉(zhuǎn)換后,才可以通過編譯器的檢測。

但是,這里會發(fā)生一些意想不到的事情,比如類型截斷。

什么是類型截斷,即一個值范圍較大的變量A轉(zhuǎn)換為值范圍較小的變量B,如果超出范圍,則將A減去B的區(qū)間長度。

例如,128超出了i8類型的范圍(-128,127),強(qiáng)轉(zhuǎn)之后的值等于128-256=-128。

2、在學(xué)習(xí)Trait的時候,我們發(fā)現(xiàn)一個問題,類型A可以實現(xiàn)很多Trait,有些Trait存在函數(shù)簽名相同的情況,但是內(nèi)部實現(xiàn)卻不相同,如果使用A為主題去調(diào)用的話,編譯器無法判斷應(yīng)該調(diào)用哪個函數(shù),所以必須將A向上強(qiáng)轉(zhuǎn)為特定的Trait,以告知編譯器如何做出判斷。

例如,B和C是有同名含函數(shù)name()的Trait,A分別實現(xiàn)了他們,當(dāng)A想要調(diào)用B的name()的時候,需要顯示轉(zhuǎn)換,避免歧義,如::name()。

3、as還可以在父類型與子類型之間相互轉(zhuǎn)換,比如&’static str和&'a  str。'static生命周期是整個進(jìn)程存活期間有效的,而'a的生命周期較短,我們稱&'static是&'a的子類型,使用'static:'a來表示。as可以將父子類型自由轉(zhuǎn)換,如&'static  str as &'a str,這種做法的意義是為了滿足某些函數(shù)對生命周期的要求。

From和Into

這2個Trait定義在標(biāo)準(zhǔn)庫的convert模塊中,其實他們做的是同一件事情,不要被From和Into繞暈掉。

舉個形象的比喻,我吃飯,和飯被我吃,是一回事。只要我在吃飯,那么飯肯定正在被我吃,是一個道理。

Rust還為此定義了一個定理:如果類型A實現(xiàn)了From,則B類型實例調(diào)用into方法就可以轉(zhuǎn)換為類型A。

例如,我們常見的字符串String類型實現(xiàn)了From(&str),那么&str就可以into()為String。

大多數(shù)情況下,我們只需要實現(xiàn)From這個Trait即可,Rust為所有實現(xiàn)From的自動實現(xiàn)了反方向的Into。

怎么使用Rust語言的類型轉(zhuǎn)換

From和Into也不是完全沒有異常發(fā)生的,當(dāng)我們不確定轉(zhuǎn)換的結(jié)果是我們想要的時候,可以實現(xiàn)TryFrom和TryInto這兩個Trait,以捕獲可能發(fā)生的錯誤信息。

AsRef和AsMut

AsRef和AsMut可以將類型分別轉(zhuǎn)換為不可變引用和可變引用。這兩個Trait對我們實現(xiàn)可擴(kuò)展的函數(shù)是非常有幫助的。

比如,我們想設(shè)計一個允許傳入&String和&str都可以的函數(shù),那么像下圖中的test函數(shù)那樣做:

怎么使用Rust語言的類型轉(zhuǎn)換

如果我們自己定義一個類型,最好能實現(xiàn)AsRef這個Trait,它會給我們帶來很多意想不到的實惠。

FromStr

Rust內(nèi)置了很多幫助我們類型轉(zhuǎn)換的實現(xiàn),字符串和其他類型之間的轉(zhuǎn)換,都會默認(rèn)實現(xiàn)FromStr這個Trait。

如果想把一個字符串轉(zhuǎn)換為整型,可以使用parse函數(shù),它會根據(jù)返回值類型自動解析字符串,以得到正確類型的返回值。

整型轉(zhuǎn)換為字符串,就不用多說了,直接format宏格式化即可。

怎么使用Rust語言的類型轉(zhuǎn)換

“怎么使用Rust語言的類型轉(zhuǎn)換”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


當(dāng)前題目:怎么使用Rust語言的類型轉(zhuǎn)換
文章來源:http://weahome.cn/article/giohdd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部