最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關于rust的模塊引入問題

 更新時間:2022年10月08日 11:33:55   作者:huangfengnt  
Rust 語言是一種高效、可靠的通用高級語言,它的執(zhí)行效率也是令人稱贊的,是一種少有的兼顧開發(fā)效率和執(zhí)行效率的語言,這篇文章主要介紹了rust的模塊引入相關知識,需要的朋友可以參考下

國慶第一次學習,真是太罪惡了,555

主要還是看這個官網(wǎng)學的,這一部分對應的是官網(wǎng)上那個教程的第七章,寫的實在是讓人有點費解,所以我這邊自己寫一下,當然范圍限制在第七章,因為我暫時只是看到哪里

Rust 語言是一種高效、可靠的通用高級語言。其高效不僅限于開發(fā)效率,它的執(zhí)行效率也是令人稱贊的,是一種少有的兼顧開發(fā)效率和執(zhí)行效率的語言。

Rust 語言由 Mozilla 開發(fā),最早發(fā)布于 2014 年 9 月。Rust 的編譯器是在 MIT License 和 Apache License 2.0 雙重協(xié)議聲明下的免費開源軟件。截至目前( 2020 年 1 月)最新的編譯器版本是 1.41.0。

Rust語言的特點

  • 高性能 - Rust 速度驚人且內(nèi)存利用率極高。由于沒有運行時和垃圾回收,它能夠勝任對性能要求特別高的服務,可以在嵌入式設備上運行,還能輕松和其他語言集成。

  • 可靠性 - Rust 豐富的類型系統(tǒng)和所有權模型保證了內(nèi)存安全和線程安全,讓您在編譯期就能夠消除各種各樣的錯誤。

  • 生產(chǎn)力 - Rust 擁有出色的文檔、友好的編譯器和清晰的錯誤提示信息, 還集成了一流的工具 —— 包管理器和構建工具, 智能地自動補全和類型檢驗的多編輯器支持, 以及自動格式化代碼等等。

Rust的應用

Rust 語言可以用于開發(fā):

  • 傳統(tǒng)命令行程序 - Rust 編譯器可以直接生成目標可執(zhí)行程序,不需要任何解釋程序。
  • Web 應用 - Rust 可以被編譯成 WebAssembly,WebAssembly 是一種 JavaScript 的高效替代品。
  • 網(wǎng)絡服務器 - Rust 用極低的資源消耗做到安全高效,且具備很強的大規(guī)模并發(fā)處理能力,十分適合開發(fā)普通或極端的服務器程序。
  • 嵌入式設備 - Rust 同時具有JavaScript 一般的高效開發(fā)語法和 C 語言的執(zhí)行效率,支持底層平臺的開發(fā)。

書上給了很多概念啊,比如什么crate,mod之類的,我這邊實際一點,寫一個叫school的包,這個包分成三個模塊,分別是teacher、student、worker,最終我在main.rs當中要調(diào)用teacher包當中的一個函數(shù),就這么簡單,下面看一下我的結構

 很簡單啊,src一個主要的main.rs,其他四個文件都在school文件夾下面。

worker.rs文件,簡單看一下

pub mod male_worker {
    pub fn male_worker_num() -> i32 {
        8
    }
}

pub修飾符代表這個文件是外部可訪問的,mod實際上是創(chuàng)建了一個命名空間,里面隨便寫了個函數(shù),返回了8,這個數(shù)字。這里需要注意一下worker.rs本身就相當于一個同名的命名空間,這一點在引入的時候會有體現(xiàn)。

student.rs看一下

pub fn student_num() -> i32 {
    // 代表我這里是120個學生
    120
}

挺簡單的,實際上就是在student mod之中創(chuàng)建一個公開的函數(shù),返回一個值,還是要著重一下,student.rs本身就是一個同名mod

teacher.rs看一下

// 創(chuàng)建一個新的mod嵌套
pub mod female_student {
    pub fn female_student_num() -> i32 {
        10
    }
}
 
//嘗試一下引入我們的student模塊
pub fn total() -> i32 {
    // 1.絕對路徑引入 這個路徑
    let student_num1 = crate::school::student::student_num();
 
    // 2.使用self進行相對路徑的引入
    // 我們用self引入一下mod female_student的內(nèi)容
    let female_student = self::female_student::female_student_num();
 
    //演示一下super的用法,super就是當前目錄的父親級別的目錄,也是就是self的父親級別
    let student_num2 = super::student::student_num();
 
    // 3.當引入路徑又臭又長的時候我們可以使用use關鍵詞,將最后一個模塊直接作為包的名字
    use crate::school::woker::male_worker;
    // use crate::school::worker::male_worker as 男性員工;
    // 上面是一個別名設置
    // 這個male_worker就變成了這么大一長串的別名
    let male_worker_num = male_worker::male_worker_num();
    let eqa = student_num1 == student_num2;
    println!("兩種測試方式取出的數(shù)是否相等:{}", eqa);
    student_num1 + student_num2 + female_student + male_worker_num
}

比較長啊,實際上我用數(shù)字標了,整體上就是三個部分:

第一部分是一個絕對路徑的引入

let student_num1 = crate::school::student::student_num();

這里的絕對路徑不是我們一般的“/”,而是crate關鍵詞開頭,那么這個crate具體指的是啥呢,其實,我認為就是src文件夾,這里可以再看一下上面的項目結構,這里是要取student(student.rs)模塊之中的函數(shù)的返回值,當然要注意一點,中間間隔的這些名稱不是文件夾,而是模塊。

第二部分是相對路徑的引入

let female_student = self::female_student::female_student_num();
 
    //演示一下super的用法,super就是當前目錄的父親級別的目錄,也是就是self的父親級別
let student_num2 = super::student::student_num();

這里是兩種情況,首先是self開頭的相對路徑,實際上就是指的本模塊,請問根據(jù)上面的teacher.rs,這里的self指的是誰?

再看一下文件,teacher.rs實際上是由一個叫total的函數(shù)和模塊female_student組成的,這個self在total函數(shù)中,當然指的是teacher這個模塊啦,female_student是teacher的子模塊,接下來就好理解了。

在第二種情況中,super指的就是當前self的父模塊,實際就是school,實際使用上來看:mod申明的是個模塊,rs文件是個模塊,school文件夾也是模塊啦

第三部分看一下use關鍵詞

use crate::school::woker::male_worker;
    // use crate::school::worker::male_worker as 男性員工;
    // 上面是一個別名設置
    // 這個male_worker就變成了這么大一長串的別名
    let male_worker_num = male_worker::male_worker_num();

本質(zhì)上就是這樣模塊化的寫法太長,使用use將長串模塊的最后一個名稱作為整體的名稱,當然也可以使用as的方式創(chuàng)建別名

main.rs拿到模塊中的值

teacher.rs返回了一個i32的值,那這個值要怎么拿到呢,看一下上面的項目結構,我們有一個mod.rs的文件如下

pub mod student;
pub mod teacher;
pub mod woker;

這個文件夾的創(chuàng)立是為了申明school文件夾本身是個大模塊,同時也是為了讓main.rs找到school模塊,并使用里面的函數(shù),這里的mod就不是申明模塊了,而是引入模塊。我們看一下main.rs如何引入

fn main() {
    // 嘗試一下引入函數(shù)
    let total = school::teacher::total();
    println!("{}", total);
 
}
mod school;
 

這里也有一個mod school作用和上面一樣,引入已經(jīng)申明的模塊,運行一下也是成功的

 總結一下就以下幾個問題:

1.哪些部分能叫模塊(文件夾、rs文件、文件中的mod申明)

2.mod關鍵詞啥作用(文件中申明模塊,引入模塊)

3.use和pub關鍵詞(縮短路徑,外部獲?。?/p>

4.相對和絕對路徑如何拿到模塊中的值(self,super)

當然,初學還是有點不太懂的,當個建議記錄看看就行

到此這篇關于rust的模塊引入的文章就介紹到這了,更多相關rust模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Rust語言之trait中的個方法可以重寫嗎

    Rust語言之trait中的個方法可以重寫嗎

    在Rust中,trait定義了一組方法,這些方法可以被一個或多個類型實現(xiàn),當你為某個類型實現(xiàn)一個trait時,你可以為該trait中的每個方法提供自己的具體實現(xiàn),本文將給大家介紹一下trait中的個方法是否可以重寫,需要的朋友可以參考下
    2023-10-10
  • rust?創(chuàng)建多線程web?server的詳細過程

    rust?創(chuàng)建多線程web?server的詳細過程

    web?server?中主要的兩個協(xié)議是?http?和?tcp,tcp?是底層協(xié)議,http?是構建在?tcp?之上的,本篇文章重點給大家介紹rust?創(chuàng)建多線程web?server的詳細過程,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • Rust?連接?PostgreSQL?數(shù)據(jù)庫的詳細過程

    Rust?連接?PostgreSQL?數(shù)據(jù)庫的詳細過程

    這篇文章主要介紹了Rust?連接?PostgreSQL?數(shù)據(jù)庫的完整代碼,本文圖文實例代碼相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • Rust?Atomics?and?Locks內(nèi)存序Memory?Ordering詳解

    Rust?Atomics?and?Locks內(nèi)存序Memory?Ordering詳解

    這篇文章主要為大家介紹了Rust?Atomics?and?Locks內(nèi)存序Memory?Ordering詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Rust循環(huán)控制結構用法詳解

    Rust循環(huán)控制結構用法詳解

    Rust提供了多種形式的循環(huán)結構,每種都適用于不同的場景,在Rust中,循環(huán)有三種主要的形式:loop、while和for,本文將介紹Rust中的這三種循環(huán),并通過實例展示它們的用法和靈活性,感興趣的朋友一起看看吧
    2024-02-02
  • Rust如何使用線程同時運行代碼

    Rust如何使用線程同時運行代碼

    Rust使用1:1線程模型,通過std::thread::spawn創(chuàng)建線程,返回JoinHandle用于等待線程完成,閉包默認借用外部變量,使用move關鍵字轉移所有權,多線程共享數(shù)據(jù)時需使用并發(fā)原語,如Mutex、RwLock、Arc等,以避免競態(tài)條件
    2025-02-02
  • Rust中實例化動態(tài)對象的示例詳解

    Rust中實例化動態(tài)對象的示例詳解

    這篇文章主要為大家詳細介紹了Rust中實例化動態(tài)對象的多種方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-02-02
  • rust如何解析json數(shù)據(jù)舉例詳解

    rust如何解析json數(shù)據(jù)舉例詳解

    這篇文章主要給大家介紹了關于rust如何解析json數(shù)據(jù)的相關資料,SON 格式非常輕量級,因此它非常適合在網(wǎng)絡中傳輸大量數(shù)據(jù),文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • rust交叉編譯問題及報錯解析

    rust交叉編譯問題及報錯解析

    這篇文章主要為大家介紹了rust交叉編譯問題及報錯解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Rust 的 into_owned() 方法實例詳解

    Rust 的 into_owned() 方法實例詳解

    into_owned是Rust語言中std::borrow::Cow 枚舉的一個方法,into_owned確保了調(diào)用者獲得數(shù)據(jù)的獨立所有權,無論Cow之前是引用還是已經(jīng)擁有數(shù)據(jù),本文給大家介紹Rust 的 into_owned() 方法,感興趣的的朋友跟隨小編一起看看吧
    2024-03-03

最新評論

开原市| 方山县| 岗巴县| 宁陕县| 通许县| 若羌县| 太仆寺旗| 荔波县| 河南省| 陆河县| 延安市| 三江| 深泽县| 浦江县| 沙洋县| 三门峡市| 连江县| 富锦市| 渭源县| 金沙县| 沁阳市| 石狮市| 江源县| 扶绥县| 乌审旗| 织金县| 湖口县| 泾阳县| 怀仁县| 马龙县| 珲春市| 汉源县| 西丰县| 宁海县| 西畴县| 临夏市| 彰武县| 浙江省| 图片| 东明县| 玉门市|