rust学习二、入门之运行单个脚本
入门者,在搭建好环境好之后,接下来得先熟悉工具。有了趁手的工具,学起来才会快得多!
作为入门者,非常希望能够单独运行一个rust脚本,而没有必要一个练习就建立一个项目,或者在一个笨重的ide中运行一个脚本文件。
在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是获取非常方便,使用也很方便的工具,但是过时了。应该使用rust-script
如果不需要单步调试,run-script已经是一个不错的工具