日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Rust 拖慢開發速度,剛來實習生被折磨哭了

來源: 責編: 時間:2024-01-10 09:35:56 200觀看
導讀大家好,我叫漁夫。Rust 如果你掌握了,開發速度也是驚人的,如還不夠熟悉基本概念、特性、標準庫等使用,那么寫 Rust 無疑就是和編輯器做斗爭的,前期非常痛苦,還好現在的 IDE 非常智能。今天,我們來一起看這個非常實用的 Trait

大家好,我叫漁夫。wtN28資訊網——每日最新資訊28at.com

Rust 如果你掌握了,開發速度也是驚人的,如還不夠熟悉基本概念、特性、標準庫等使用,那么寫 Rust 無疑就是和編輯器做斗爭的,前期非常痛苦,還好現在的 IDE 非常智能。wtN28資訊網——每日最新資訊28at.com

今天,我們來一起看這個非常實用的 Trait。wtN28資訊網——每日最新資訊28at.com

wtN28資訊網——每日最新資訊28at.com

Drop

Drop 的作用就是釋放實現者的實例擁有的資源,意思是當一個值的擁有者消失的時候,Rust 會丟棄這個值,通常用于資源清理。實際中,比如關閉文件、網絡連接或釋放內存等等場景。wtN28資訊網——每日最新資訊28at.com

例子:wtN28資訊網——每日最新資訊28at.com

struct FileResource {}impl Drop for FileResource {    fn drop(&mut self) {        println!("FileResource 被銷毀,資源被釋放。");    }}fn main() {    {        let resource = FileResource {};    }    println!("FileResource 已離開作用域。");}

這個例子中,定義一個簡單的空結構體 FileResource,如果這個結構,不再被使用時應該執行釋放掉的。wtN28資訊網——每日最新資訊28at.com

然后,去實現 Drop 特質,這個方法將在結構體的實例中,不再使用時自動被調用。在 drop 方法中,實際我們會編寫一些釋放資源的相關代碼。本實例,作為演示只打印了一條消息來表示 drop 方法被調用了。你也可以做類似如關閉文件、斷開網絡連接或釋放分配的內存等相關邏輯。wtN28資訊網——每日最新資訊28at.com

main 函數,在作用域中創建實例 resource  ,當這個作用域結束時,那么resource 會自動離開作用域,這時 Rust 自動調用,也可以理解為它的生命周期也就結束了,不可再被使用了。wtN28資訊網——每日最新資訊28at.com

離開作用域后,Rust 將負責調用 drop 方法來執行清理工作。這也是 Rust 自動資源管理和“析構”行為,目的應該是防止資源泄漏及資源濫用情況。wtN28資訊網——每日最新資訊28at.com

最后打印結果:wtN28資訊網——每日最新資訊28at.com

FileResource 被銷毀,資源被釋放。FileResource 已離開作用域。

Clone

Clone 的作用適用在,允許一個對象的實例被顯式地復制。當你的類型實現了 Clone 特質,那么就可以使用其 clone 方法來創建該類型的一個新實例,這個新實例與原始實例一模一樣,但擁有不同的內存地址。wtN28資訊網——每日最新資訊28at.com

使用場景也是非常廣泛的,如:wtN28資訊網——每日最新資訊28at.com

  • 避免共享可變引用
  • 保持原始數據不變
  • 傳遞數據給函數
  • 實現非原子或復雜類型的默認行為
  • 緩存或備份

使用 Clone 通常涉及深拷貝,對于大型或復雜的數據結構,性能內存使用情況,也需要考慮。wtN28資訊網——每日最新資訊28at.com

例子:wtN28資訊網——每日最新資訊28at.com

#[derive(Clone)]struct DemoStruct {    field: i32,}fn main() {    let original = DemoStruct { field: 23 };    let clone = original.clone(); // 相當于創建一個副本    println!("原始對象的 field: {}", original.field);    println!("克隆對象的 field: {}", clone.field);}執行結果:原始對象的 field: 23克隆對象的 field: 23

Copy

Copy 特質也是一樣允許一個類型的值在賦值或作為函數參數傳遞時被隱式復制。這個通常適用于小型和簡單的值類型,如整數和浮點數等。wtN28資訊網——每日最新資訊28at.com

當允許一個類型成為 Copy ,值得注意的是,如果如果復制開銷很大,也并適合進行這種隱式復制的。所以,對大型或復雜的數據結構,數據會被完整復制,導致性能問題。wtN28資訊網——每日最新資訊28at.com

例子:wtN28資訊網——每日最新資訊28at.com

#[derive(Clone, Copy)]struct DemoStruct {    field: i32,}fn main() {    let original = DemoStruct { field: 32 };    let copy = original;     println!("原始對象的 field: {}", original.field);    println!("復制對象的 field: {}", copy.field);}

在 main 函數中,創建了 DemoStruct 的一個實例 original,然后通過簡單的賦值創建了一個名為 copy 的新實例。由于 DemoStruct 實現了 Copy 特質,original 會被自動復制給 copy,而不是移動(move)。wtN28資訊網——每日最新資訊28at.com

其他的:wtN28資訊網——每日最新資訊28at.com

  • Sized
  • Deref 與 DerekfMut
  • Default
  • AsRef和AsMut
  • Borrow 和 BorrowMut
  • From 和 Into
  • TryFrom 和 TryInto
  • ToOwned

本文鏈接:http://www.www897cc.com/showinfo-26-59676-0.htmlRust 拖慢開發速度,剛來實習生被折磨哭了

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 一個用于批量給圖片增加水印的Python庫

下一篇: 2023年最火前端項目憑什么是它?

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 张家口市| 平阴县| 淮南市| 托克逊县| 论坛| 潮州市| 五寨县| 特克斯县| 宜章县| 博爱县| 喜德县| 巨野县| 桂林市| 巴楚县| 涿州市| 肇源县| 合江县| 沐川县| 桑植县| 静宁县| 娱乐| 和静县| 防城港市| 南岸区| 璧山县| 新野县| 榆社县| 万荣县| 景泰县| 丹棱县| 济阳县| 应用必备| 岳阳市| 青浦区| 营山县| 津南区| 来凤县| 金昌市| 高邑县| 唐河县| 兴业县|