我正在使用the Clap crate解析命令行参数。我定义了应该列出文件的子命令ls
。 Clap还定义了help
子命令,该子命令显示有关应用程序及其使用情况的信息。
如果未提供任何命令,则什么都不会显示,但是在这种情况下,我希望该应用程序显示帮助。
我已经试过了这段代码,看起来很简单,但是却行不通:
extern crate clap;
use clap::{App, SubCommand};
fn main() {
let mut app = App::new("myapp")
.version("0.0.1")
.about("My first CLI APP")
.subcommand(SubCommand::with_name("ls").about("List anything"));
let matches = app.get_matches();
if let Some(cmd) = matches.subcommand_name() {
match cmd {
"ls" => println!("List something here"),
_ => eprintln!("unknown command"),
}
} else {
app.print_long_help();
}
}
我收到一个在移动后使用
app
的错误:error[E0382]: use of moved value: `app`
--> src/main.rs:18:9
|
10 | let matches = app.get_matches();
| --- value moved here
...
18 | app.print_long_help();
| ^^^ value used here after move
|
= note: move occurs because `app` has type `clap::App<'_, '_>`, which does not implement the `Copy` trait
仔细阅读Clap的文档,我发现
clap::ArgMatches
中返回的get_matches()
具有一种 usage
方法,该方法返回使用部分的字符串,但不幸的是,仅此部分,而没有其他内容。 最佳答案
使用 clap::AppSettings::ArgRequiredElseHelp
:
App::new("myprog")
.setting(AppSettings::ArgRequiredElseHelp)
也可以看看:
关于rust - 没有提供命令时,Clap有什么简单的方法可以显示帮助?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49290526/