02.Rust学习-传参1

简介

Rust 是一种 静态编译的、快速的语言,具有出色的工具支持和迅速增长的生态系统,这使它非常适合编写命令行应用程序。在平时的生信分析中,大部分工具也是命令行形式。因此,从这个角度来说,Rust是非常适合应用于生信领域。作为一个命令行应用程序(CLI),最基本的要求是能够与外界进行参数传递。

获取参数

一种方式是通过Rust标准库提供的std::env::args() 方法,提供了运行时给定参数的迭代器。
另一种是当前最受欢迎的解析命令行参数的库clap。

args用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
fn main() {
let pattern = std::env::args().nth(1).expect("no pattern given");
let path = std::env::args().nth(2).expect("no path given");
// 直接返回迭代器中相应位置的元素;
println!("{},{}",pattern,path);

let args:Vec<String> = std::env::args().collect();
// 将迭代器转换为一个集合
dbg!(args);

/*
$ cargo run -- test tmp.txt
test,tmp.txt
[src\main.rs:12] args = [
"target\\debug\\learn_env.exe",
"test",
"tmp.txt",
]
*/

}

clap用法

使用clap库前,需要提前导入clap库。

1
2
3
4
5
6
7
# 方法一
cargo add clap --features derive
# 方法二
直接在Cargo.toml中添加
clap = { version = "4.4.18", features = ["derive"] }
# 默认情况下,所有的 feature 都会被自动禁用;
# 以上配置为 clap 依赖开启了 derive feature;

简单案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use clap::Parser;

fn main() {

let args = Cli::parse();

println!("{},{}",args.pattern,args.path);
}

/// 在文件中搜索并显示包含它的行;
#[derive(Parser)]
struct Cli {
/// 要查找的模式
#[arg(short = 's', long = "pattern")]
pattern: String,
/// 要读取的文件路径
#[arg(short = 'p', long = "path")]
path: String,
}
/*
$ cargo run -- -h
Finished dev [unoptimized + debuginfo] target(s) in 0.08s
Running `target\debug\learn_env.exe -h`
在文件中搜索模式并显示包含它的行;

Usage: learn_struct.exe --pattern <PATTERN> --path <PATH>

Options:
-s, --pattern <PATTERN> 要查找的模式
-p, --path <PATH> 要读取的文件路径
-h, --help Print help

很简单的,就可以打印出漂亮的帮助信息
*/

clap 还有更详细的配置信息,比如子命令模式等,下次再进一步学习。毕竟现在的目标是快速上手Rust,边实战边学习。

参考链接

Crate clap
Rust 程序设计语言 简体中文版

-------------本文结束感谢您的阅读-------------

本文标题:02.Rust学习-传参1

文章作者:Fangj

发布时间:2024年01月17日 - 22:01

最后更新:2024年01月17日 - 22:01

原始链接:https://biofang.github.io/2024/01/17/02-Rust学习-传参1/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。