檢視 Rust筆記 的原始碼
←
Rust筆記
跳至導覽
跳至搜尋
由於下列原因,您沒有權限進行編輯此頁面的動作:
您請求的操作只有這個群組的使用者能使用:
使用者
您可以檢視並複製此頁面的原始碼。
{{Nav|程式語言、邏輯學}} =Programming Rust筆記= ==Ch1概論== *系統程式語言有「未定義行為」。 *使用者輸入的內容可能會導致程式漏洞。 ** 編譯時消除未定義行為 ** 安全,亦於使用 ** 平行編譯 ** 0 overhead的C++,只有必要花費,不會花費太多資源消耗 ** 善用底層 ** cargo、trait、generic ==Ch2 Rust特性簡單導覽== * rust doc產生文件 * rust編譯器 * cargo編譯管理器 ** cargo clean清除編譯文件 ** cargo new --vcs none #不生成.gitignore ** cargo run # 直接編譯系統執行 * 通常不用寫return。沒有<code>;</code>結尾的視為回傳值。 * 函數定義示例: <pre>fn foo(mut n :i64) -> i64{ ... }</pre> <code>assert!(a == b)</code>錯誤時拋出panic * identifier後面的<code>!</code>為巨集 * <code>let x = m</code>可以這樣寫,會儘可能型別推論。比較<code>let x : i64 = m</code>。let 表局域變數。 * 4空白是縮排標準。 * i32 u8 f32(C float) f64(C double) * mut 指示可變變數 * assert! 一定會被執行。debug_assert!正式執行時候不會執行此assertion。 <pre> #![test] // attribution,控制編譯器、code style,或檢視條件加入程式碼。 fn test_gcd(){ assert_eq!(foo(x), rhs); #檢查左右有沒有相等的assertion } </pre> *Vec::new() // 類似Python的List * use std::str::FromStr; 和 use std::env:呼叫外部函式庫 * rustup doc --std # 生成標準函式庫文件 * <code>for arg in env::args().skip(1)</code> 跳過第一個argument,取值跑迴圈。 * numVec.push(item); #將item往後附加於numVec * u64::from_str(numInStr).expect("errorMsg") // 回傳 result = Ok(v) | Err(e),若是Err則吐出 "errorMsg"。 * eprintln!("err"); #寫到標準錯誤輸出流 <pre> for m in &numbers[1..]{ d = gcd(d, *m); } </pre> 上方的&表示m只是一個ref,將numbers借用,不改變numbers這個變數的所有權。 * m 表示將ref轉成值,deref。 * std::process::exit(1); 輸出錯誤回傳值1。 * println!("...{}...{:?}", a, b); // {} 和{...}都是template-string。 =其他= ==套件管理== ===cargo=== ====加入新函式庫==== <code>cargo add csv</code> ==編輯器== ===Emacs=== * [https://github.com/rust-lang/rust-mode rust-mode] ** C-c C-c C-r:跑程式 ** C-c C-f:改善排版,要先裝rustfmt ==型別== ===函數=== ===struct=== <pre> struct Aminal { species: String, name: String, weight: u64, } </pre> ===資料結構=== * [https://oooutlk.github.io/trees/crud.html 樹的使用函式庫] Apache License 2.0/MIT ==函數== # 得到 UTF-8 字串長度的方法:[https://docs.rs/unicode-segmentation/1.6.0/unicode_segmentation/index.html UnicodeSegmentation::graphemes](參見:[https://stackoverflow.com/questions/46290655/get-the-string-length-in-characters-in-rust Stack Overflow]) # [https://stackoverflow.com/questions/45519176/how-do-i-use-or-import-a-local-rust-file 匯入外部函式庫] ===印出當前目錄(current directory)=== <pre> use std::env; ... println!("{:?}", env::current_dir()); </pre> 執行結果: <code>Ok("[project_dir]")</code> ===sysargv 傳入程式的引數=== 求出引數個數長度,沒輸入自定引數則為0: <pre> use std::env; ... println!("{}", env::args().len()); </pre> ==變數== # [https://www.educative.io/edpresso/how-to-use-references-in-rust 使用參照的方法] #: <code>foo (x : &mut i64){...}</code> # [https://stackoverflow.com/questions/30154541/how-do-i-concatenate-strings 連結字串] #: <code>let concat_str = format!("{}{}", str1, str2);</code> ==字串== # 獲得子字串:<code>a = a[..1].to_string();</code> ==食譜 (Cookbook)== ===子目錄的item用for遍歷,轉成字串=== <pre> let corpus_CSV_paths = fs::read_dir("./corpus").unwrap(); for path in corpus_CSV_paths { let path_string = format!("{:?}", path.unwrap().path()); } </pre> ===讀檔案顯示資料=== 摘自:https://doc.rust-lang.org/book/ch12-02-reading-a-file.html <pre> let contents = fs::read_to_string(file_path) .expect("Should have been able to read the file"); println!("With text:\n{contents}");</pre> ==函式庫== === Gtk4 === # [[Grid於Rust的Gtk4 binding]] [[category:資訊]]
此頁面使用了以下模板:
模板:Nav
(
檢視原始碼
)
返回到「
Rust筆記
」。
導覽選單
個人工具
登入
命名空間
頁面
討論
變體
視圖
閱讀
檢視原始碼
檢視歷史
更多
搜尋
導覽
首頁
愛爾蘭語辭典
近期變更
隨機頁面
有關 MediaWiki 的說明
相關網站
總首頁
Blog
舊 blog
現用 blog 備份
工具
連結至此的頁面
相關變更
特殊頁面
頁面資訊