網站首頁 編程語言 正文
國慶第一次學習,真是太罪惡了,555
主要還是看這個官網學的,這一部分對應的是官網上那個教程的第七章,寫的實在是讓人有點費解,所以我這邊自己寫一下,當然范圍限制在第七章,因為我暫時只是看到哪里
Rust 語言是一種高效、可靠的通用高級語言。其高效不僅限于開發效率,它的執行效率也是令人稱贊的,是一種少有的兼顧開發效率和執行效率的語言。
Rust 語言由 Mozilla 開發,最早發布于 2014 年 9 月。Rust 的編譯器是在 MIT License 和 Apache License 2.0 雙重協議聲明下的免費開源軟件。截至目前( 2020 年 1 月)最新的編譯器版本是 1.41.0。
Rust語言的特點
高性能?- Rust 速度驚人且內存利用率極高。由于沒有運行時和垃圾回收,它能夠勝任對性能要求特別高的服務,可以在嵌入式設備上運行,還能輕松和其他語言集成。
可靠性?- Rust 豐富的類型系統和所有權模型保證了內存安全和線程安全,讓您在編譯期就能夠消除各種各樣的錯誤。
生產力?- Rust 擁有出色的文檔、友好的編譯器和清晰的錯誤提示信息, 還集成了一流的工具 —— 包管理器和構建工具, 智能地自動補全和類型檢驗的多編輯器支持, 以及自動格式化代碼等等。
Rust的應用
Rust 語言可以用于開發:
- 傳統命令行程序?- Rust 編譯器可以直接生成目標可執行程序,不需要任何解釋程序。
- Web 應用?- Rust 可以被編譯成 WebAssembly,WebAssembly 是一種 JavaScript 的高效替代品。
- 網絡服務器?- Rust 用極低的資源消耗做到安全高效,且具備很強的大規模并發處理能力,十分適合開發普通或極端的服務器程序。
- 嵌入式設備?- Rust 同時具有JavaScript 一般的高效開發語法和 C 語言的執行效率,支持底層平臺的開發。
書上給了很多概念啊,比如什么crate,mod之類的,我這邊實際一點,寫一個叫school的包,這個包分成三個模塊,分別是teacher、student、worker,最終我在main.rs當中要調用teacher包當中的一個函數,就這么簡單,下面看一下我的結構
?很簡單啊,src一個主要的main.rs,其他四個文件都在school文件夾下面。
worker.rs文件,簡單看一下
pub mod male_worker {
pub fn male_worker_num() -> i32 {
8
}
}
pub修飾符代表這個文件是外部可訪問的,mod實際上是創建了一個命名空間,里面隨便寫了個函數,返回了8,這個數字。這里需要注意一下worker.rs本身就相當于一個同名的命名空間,這一點在引入的時候會有體現。
student.rs看一下
pub fn student_num() -> i32 {
// 代表我這里是120個學生
120
}
挺簡單的,實際上就是在student mod之中創建一個公開的函數,返回一個值,還是要著重一下,student.rs本身就是一個同名mod
teacher.rs看一下
// 創建一個新的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的內容
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!("兩種測試方式取出的數是否相等:{}", eqa);
student_num1 + student_num2 + female_student + male_worker_num
}
比較長啊,實際上我用數字標了,整體上就是三個部分:
第一部分是一個絕對路徑的引入
let student_num1 = crate::school::student::student_num();
這里的絕對路徑不是我們一般的“/”,而是crate關鍵詞開頭,那么這個crate具體指的是啥呢,其實,我認為就是src文件夾,這里可以再看一下上面的項目結構,這里是要取student(student.rs)模塊之中的函數的返回值,當然要注意一點,中間間隔的這些名稱不是文件夾,而是模塊。
第二部分是相對路徑的引入
let female_student = self::female_student::female_student_num();
//演示一下super的用法,super就是當前目錄的父親級別的目錄,也是就是self的父親級別
let student_num2 = super::student::student_num();
這里是兩種情況,首先是self開頭的相對路徑,實際上就是指的本模塊,請問根據上面的teacher.rs,這里的self指的是誰?
再看一下文件,teacher.rs實際上是由一個叫total的函數和模塊female_student組成的,這個self在total函數中,當然指的是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();
本質上就是這樣模塊化的寫法太長,使用use將長串模塊的最后一個名稱作為整體的名稱,當然也可以使用as的方式創建別名
main.rs拿到模塊中的值
teacher.rs返回了一個i32的值,那這個值要怎么拿到呢,看一下上面的項目結構,我們有一個mod.rs的文件如下
pub mod student;
pub mod teacher;
pub mod woker;
這個文件夾的創立是為了申明school文件夾本身是個大模塊,同時也是為了讓main.rs找到school模塊,并使用里面的函數,這里的mod就不是申明模塊了,而是引入模塊。我們看一下main.rs如何引入
fn main() {
// 嘗試一下引入函數
let total = school::teacher::total();
println!("{}", total);
}
mod school;
這里也有一個mod school作用和上面一樣,引入已經申明的模塊,運行一下也是成功的
?總結一下就以下幾個問題:
1.哪些部分能叫模塊(文件夾、rs文件、文件中的mod申明)
2.mod關鍵詞啥作用(文件中申明模塊,引入模塊)
3.use和pub關鍵詞(縮短路徑,外部獲取)
4.相對和絕對路徑如何拿到模塊中的值(self,super)
當然,初學還是有點不太懂的,當個建議記錄看看就行
原文鏈接:https://blog.csdn.net/huangfengnt/article/details/127185934
相關推薦
- 2022-07-19 提升Python運算效率1 - numba-jit
- 2022-04-11 K8S部署Kafka界面管理工具(kafkamanager)方法詳解_云其它
- 2022-04-17 idea中將項目打成jar包并在其他項目中引用
- 2022-06-27 教你用Python按順序讀取文件夾中文件_python
- 2022-07-30 jQuery?UI旋轉器部件Spinner?Widget_jquery
- 2022-07-13 JMeter主要元件_線程組的使用方法
- 2022-08-21 Go語言的互斥鎖的詳細使用_Golang
- 2023-07-27 TypeScript類和多態、抽象類、訪問修飾符
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支