入門者,在搭建好環境好之後,接下來得先熟悉工具。有了趁手的工具,學起來才會快得多!
作為入門者,非常希望能夠單獨執行一個rust指令碼,而沒有必要一個練習就建立一個專案。
在https://crates.io上,我們可以找到各種各樣的工具,有兩個可以關注:
- cargo-script ,很不幸的是,這個專案自從2017年之後就麼有更新了,所以掌握主要的方法即可。
- rust-script,最近還有更新.推薦用這個。
有了這些工具,即使沒有ide環境,也可以非常容易學習基本的rust程式碼!
為了節約篇幅,以下稱為script或者指令碼命令。
script的安裝非常容易:
- cargo install cargo-script
- cargo install rust-script
cargo-script的官網地址:GitHub - DanielKeep/cargo-script: Cargo script subcommand
run-scipt 官網地址:https://github.com/fornwall/rust-script ,https://rust-script.org/
注意有個和cargo-script很類似的東西是script,不要搞錯。
一、cargo-script的作用
透過命令列大概可以知道script有什麼作用
cargo help script
注意:如果沒有安裝cargo-script,那麼是不會出現這個命令選項的。
各個選項/標記都很有用。重點介紹下選項部分
-d 新增一個外部依賴
-D 新增一個宏依賴
-x 新增一個宏
-t 使用模板
-l 從標準輸入獲取指令碼,並每行執行一次
- 把指令碼當做字面表示式執行
二、cargo-script示例
2.1單獨執行一個rs且不附加依賴
這是最常見的語法,非常適合在無需額外依賴的情況,非常適用於初學者用來練習rust的基本知識。
此外上面的命令等價於下面這個:
cargo-script script 2.2mut_immt.rs
鑑於這個要輸入更多字元,不如用cargo script xxx 更省事一些。
2.2 新增/注入一個依賴
建立一個指令碼 ,部分如下:
/** * cargo script -d rand 2.1guessGame.rs */ extern crate rand; use std::io; use rand::{thread_rng, Rng}; use std::cmp::Ordering; fn main(){ println!("猜猜數字"); let secret_str =rand::thread_rng().gen_range(1..101); //let s: String = secretStr.to_string(); println!("輸入猜測的次數"); let mut gts=String::new(); io::stdin().read_line(&mut gts).expect("讀取失敗"); let gts: u32=gts.trim().parse().expect("請輸入一個數字");
注意,沒有其它什麼配置。現在就希望在它所在目錄執行(如果執行 cargo run)
則可以如下:
-d 可以新增一個依賴
-x 注入一個外部的crate(程式包)
三、rust-script
安裝 cargo install rust-script
3.1 檢視幫助
還有許多,不浪費篇幅了。
某種程度上和cargo-script還有不少相似之處,二者應該有某種關聯的。
3.2 執行一個指令碼-不帶外部依賴
rust-script 3.2_compoundtype複合.rs
如果不帶依賴,速度還行。
3.3 執行一個指令碼-帶外部依賴
和cargo-script很像
rust-script -d rand 2.1guessGame.rs
第一次可能很慢,你會懷疑是不是卡死了,後來一看官方說明,瞭解了:
Under the hood, a Cargo project will be generated and built (with the Cargo output hidden unless compilation fails or the -c/--cargo-output option is used).
The first invocation of the script will be slower as the script is compiled
- subsequent invocations of unmodified scripts will be fast as the built executable is cached.
3.4直接執行一個表示式
雖然用的少,偶爾還是會用用,語法:
rust-script -e "xxxx"
-e 選項可以結合其它選項一起使用,例如 -d,可以注入模組
例-執行單句且注入外部的模組
rust-script -d time -e "time::util::is_leap_year(2024)"
輸出true
例-執行多條語句
rust-script -e "{let a=10; let b=20;a+b}"
輸出 30;
為了避免亂七八雜的麻煩,可以使用{}
四、小結
cargo-script是獲取非常方便,使用也很方便的工具,但是過時了。應該使用run-script
不過不需要單步除錯,run-script已經是一個不錯的工具