rust學習二、入門之執行單個指令碼

正在战斗中發表於2024-11-05

入門者,在搭建好環境好之後,接下來得先熟悉工具。有了趁手的工具,學起來才會快得多!

作為入門者,非常希望能夠單獨執行一個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已經是一個不錯的工具

相關文章