rust學習二十.5、RUST特質中的關聯類型
這是rust特質(trait)中頗有意思的一個特性。 一、前言 這個特性,在前面已經有接觸過,例如書本的第十三章節的迭代器特質就有這個例子: impl Iterator for BooksIterator { type Item = String; fn next(mut self) - OptionString { if self.current_index 3
昵稱 正在戰鬥中
這是rust特質(trait)中頗有意思的一個特性。 一、前言 這個特性,在前面已經有接觸過,例如書本的第十三章節的迭代器特質就有這個例子: impl Iterator for BooksIterator { type Item = String; fn next(mut self) - OptionString { if self.current_index 3
昵稱 正在戰鬥中
一、前言 為通用類型賦予一個默認的類型,大部分的語言是沒有這個特性的,但是也有例外的,例如TypeScript(可能還有其它)。 例如TypeScript可以這樣使用: class MyClassT = number { value: T; constructor(value: T) { this.value = value; } printValu
昵稱 正在戰鬥中
rust中看不到java等一些OOP語言的中用於修飾方法的static之類的關鍵字眼。 注:rust有static關鍵字,目前是用於修飾生命週期的或者是變量的 例如: let leaked_str: 'static str = Box::leak(tmp.into_boxed_str()); static mut SIGN: u32 = 0;
昵稱 正在戰鬥中
有的時候,可能希望使用的特質已經實現了其它特質(看後面可以知道,實際是要求相關類型實現了其它特質)。 RUST支持為特質(trait)指定限定的特質。 例如我們定義特質A,之後定義了類型T,這個時候還希望T已經實現了特質TC。 在rust中就是這個語法: trait tx:t1 trait tx:t1+t2..+tn 根據相關數據的例子和説明,需要特別注意,具體的實現都是依賴於類型,而不是特質。
昵稱 正在戰鬥中
點擊查看代碼 fn main() { let v = vec![1, 2, 3, 4]; let a: Vec_ = v.iter().filter(|x: i32| *x % 2 == 0).map(|x: i32| x * 2).collect(); let b: Vec_ = v.iter().map(|x: i32| x * 2).filter(|x: i32
昵稱 狗十二
回憶下孤兒規則: 1.只有當一個trait或類型在當前的crate中定義時,才能為外部類型實現該trait。 沒有限定是特質還是類型 反過來,如果特質和類型都是外部,那麼不能在當前單元包實現 2.例外情況-std中特質是例外。大體驗證了凡事都有例外 孤兒規則的目的:避免編譯器無法確定應該用哪一個實現。 這個目的很容易理解。無論是否叫孤兒,絕大部分語言中都是類似的規則-不允許一個類型實現接口/特質的
昵稱 正在戰鬥中
這兩個內容都比較容易理解。 一、新類型(newtype)模式 注意,這裏説的是一種編程模式,不是説有一個叫newtype的類型。 這種編程模式的含義:為某個類型作個封裝,構建一個新的類型,以便繞過某些束縛,從而達成特定目的。 目的如下: a.用於抽象掉一些類型的實現細節 b.可以隱藏其內部的泛型類型 c.實現曲線救國 一個典型的例子,利用新類型繞過孤兒規則。 二、類型別名 語法 type xxx=
昵稱 正在戰鬥中
DST(dynamic size type)-中譯“動態大小類型"。本文簡要討論動態大小類型的一些問題。 一、前言 rust作為一門靜態類型語言,和大部分其它靜態類型語言(C,C++,C#,JAVA)一樣,希望在編譯的時候知道每個實例/類型的大小。 作為靜態類型語言,優點是毋庸置疑的的: 1.類型錯誤(如字符串與整數運算)在編譯階段即可被捕獲,減少運行時崩潰風險 2.編譯器可基於類型信息優化內存分
昵稱 正在戰鬥中
函數指針是一個好東西。 一、簡述 函數指針就是執行一段函數代碼的指針。 根據官方的説法,函數指針實現了FnOnce,FnMut,Fn特質。 由於函數指針是一種數據類型,所以rustc允許它作為函數/方法的參數,這樣就給程序設計添加了不少的靈活性. 我估摸着,rust設計者就是為了讓rust能夠適應潮流:在函數/方法中直接傳遞匿名函數/閉包 一個典型的帶有函數指針的rust函數定義如下:
昵稱 正在戰鬥中
毫無疑問,宏是rust中極其重要的存在,只要我們看看一些標準庫的代碼。本文闡述rust宏相關的若干問題 一、宏的定義和作用 先介紹下宏的起源和歷史,以便讀者更能體會。 以下內容來自文心一言生成: 詞源與早期含義 希臘-拉丁詞根 "macro"源於希臘語前綴μακρο-(makro-),意為“大”或“長”。拉丁語繼承為macro-(如macro-instruction),保留“大”的
昵稱 正在戰鬥中
在rust中,匿名函數(或者説閉包)大量存在,所以有必要再次討論匿名函數的一些問題。 其中比較關鍵的是和FnXXX特質的關係,以及和被捕獲變量的關係。 本文的目的在於確認幾個要點: 一、FnOnce,FnMut,Fn簡單比較 比較彙總表 分類 執行次數 是否可以修改捕獲的外部變量 是否歸還捕獲的外部變量 備註 FnOnce 一次
昵稱 正在戰鬥中
Option類型是Rust中非常重要的一個類型,和Result也類似。 本文主要根據文檔:枚舉類型Option編寫 主要闡述以下內容: 1.Option和Result比較 2.Option的主要方法 3.示例 1.Option和Result比較 以下內容來自於文心一言 特性 Option Result 目的 表示一個值可能存在(Som
昵稱 正在戰鬥中
1. 如何去做js模塊化開發 = 模塊化標準 + 加載器 1.1、我們説討論的僅限於javascript代碼的模塊化,如果要涉及到所有文件的模塊化請使用webpack。 1.2、那麼js的模塊化可以用一句話概括:模塊化標準 + 加載器;本文主要介紹模塊化標準。 2. 幾種模塊化標準對比: CommonJS 1、以同步的模式加載模塊:通常在Nodejs環境使用,不適合瀏覽器 1. 因為服務器讀
昵稱 拖泥羊
CommonJs、ADM、CMD 什麼是模塊 將一個複雜的程序依據一定的規則(規範)封裝成幾個塊(文件), 並進行組合在一起 塊的內部數據與實現是私有的(閉包/封裝), 只是向外部暴露一些接口(方法)與外部其它模塊通信 模塊化的進化過程 全局function模式 : 將不同的功能封裝成不同的全局函數 代碼: 將不同的功能封裝成不同的全局函數 問題: 污染全局命名
昵稱 Bill
學習要,工作也不能拉下,所以這一段時間關於rust的博文少了些。 rust要學習的內容還很多,但我覺得應該優先打好基礎,這其中比較關注的是併發。 提到rust的併發,先回憶在書本rust編程語言有許多的內容: 1.併發和並行 2.通過信道(channel)共享進程間數據 關鍵庫和方法 std::sync::mpsc mpsc::channel() std::thread
昵稱 正在戰鬥中
在AI與機器人技術深度融合的今天,傳統機器人框架的性能瓶頸和開發效率問題日益凸顯。dora-rs(Dataflow Oriented Robotics Architecture) 應運而生,成為一款基於Rust語言的高性能、現代化機器人框架。其核心目標是通過數據流驅動的設計範式,解決機器人開發中低效通信、跨語言集成困難等問題,並在性能上實現對ROS/ROS2等傳統框架的超越。 一、技術架構:數據
昵稱 技安未來
阮一峯在 ES6 入門 中提到 ES6 模塊與 CommonJS 模塊有一些重大的差異: CommonJS 模塊輸出的是一個值的拷貝,ES6 模塊輸出的是值的引用。 CommonJS 模塊是運行時加載,ES6 模塊是編譯時輸出接口。 再細讀上面阮老師提到的差異,會產生諸多疑問: 為什麼 CommonJS 模塊輸出的是一個值的拷貝?其具體細節是什麼樣子的? 什麼叫 運行時加載? 什麼
昵稱 局外人
在使用webpack中的項目的時候,我們可以使用esModule,也可以使用commonJS,還可以使用import(moduleName)進行模塊的懶加載,那麼這一切webpack是怎麼做到的呢? 1、準備工作 1.1、 使用webapck@4 webpack-cli@3 "html-webpack-plugin": "4", "webpack": "4", "webpack-cli": "3"
昵稱 路飛的笑
Dart官網代碼實驗室:https://dart.dev/codelabs/async-await 重要説明:本博客基於Dart官網代碼實驗室,但並不是簡單的對官網文章進行翻譯,我會根據個人研發經驗,在覆蓋官網文章核心內容情況下,加入自己的一些擴展問題和問題演示和總結,包括名稱解釋、使用場景説明、代碼樣例覆蓋、最後完整的場景編程等。 啓蒙:錯誤的異步編程樣例 下面是一個錯誤的異步編程樣例,大概過程
昵稱 老牛啊
Dart官網文檔:https://dart.dev/language/mixins 重要説明:本博客基於Dart官網文檔,但並不是簡單的對官網進行翻譯,在覆蓋核心功能情況下,我會根據個人研發經驗,加入自己的一些擴展問題和場景驗證。 Mixin目的和使用方法(with) 官網文檔:Mixins are a way of defining code that can be reused in mult
昵稱 老牛啊
Dart官網文檔:https://dart.dev/language/variables 重要説明:本博客基於Dart官網文檔,但並不是簡單的對官網進行翻譯,在覆蓋核心功能情況下,我會根據個人研發經驗,加入自己的一些擴展問題和場景驗證。 Dart中的變量 變量是一個對象的引用,引用名就是變量的名稱;就算引用是null的變量也一樣。 變量有3種定義方式:var關鍵字,顯示類型和Object/dyna
昵稱 老牛啊
Dart官網文檔:https://dart.dev/language/libraries 重要説明:本博客基於Dart官網文檔,但並不是簡單的對官網進行翻譯,在覆蓋核心功能情況下,我會根據個人研發經驗,加入自己的一些擴展問題和場景驗證。 Dart中的庫(Library) Dart語言對代碼的複用下了不少功夫,如前面講到的Mixin高級特性實現類級別代碼複用。本文介紹另一種更寬廣的代碼複用:庫。 D
昵稱 老牛啊
Dart內置類型(共10類) Dart官網文檔:https://dart.dev/language/built-in-types Dart內置類型即Dart SDK自帶的類型,我們編程過程中可直接使用的類型,主要分為10類: 數值類型:包括int類、double類等。 字符串類型:即String類。 布爾類型:即bool類。 記錄類型:即Record類,Dart 3中開始支持(最新版本的
昵稱 老牛啊
Dart官方文檔:https://dart.dev/language/patterns 重要説明:本博客基於Dart官網文檔,但並不是簡單的對官網進行翻譯,在覆蓋核心功能情況下,我會根據個人研發經驗,加入自己的一些擴展問題和場景驗證。 Pattern模式匹配的定義 官網定義:Patterns are a syntactic category in the Dart language, like s
昵稱 老牛啊