如何解决clap 默认值 - 如何使用它
第一次玩 Rusts clap crate。 And I wonder how to use the default value of a command line option,when the option was not 在命令行中指定。
鉴于我在 yaml 文件中指定了一个 default_value
(请参阅下面的代码段),我预计
如果没有其他值,则 matches.value_of("VERBOSE")
返回默认值
在命令行中给出。
相反,我得到:
线程“main”在“在 Option::unwrap()
值上调用 None
”时发生恐慌,src/main.rs:18:6
我在谷歌上搜索了一段时间,但似乎没有人真正给出一个规范的例子来说明它是如何 应该可以工作。
...
args:
- config:
short: c
long: config
value_name: CONFIG
help: Specifies the config file to use.
takes_value: true
default_value: ""
- verbose:
short: v
long: verbose
value_name: VERBOSE
help: Sets verbosity. 0 = silent,> 0 = verbose.
takes_value: true
default_value: "1"
在这里,我无力的尝试......编译但不起作用(如果使用空命令行会导致恐慌)。
// ...
let yaml = load_yaml!("cli.yml");
let matches = App::from_yaml(yaml).get_matches();
let verbosity =
matches.value_of("VERBOSE")
.and_then(|s| s.parse::<u8>().ok())
.unwrap();
由于这显然不使用默认值,我的简单问题是:我该怎么做?
解决方法
问题是您对 value_name
(仅用于 CLI 帮助选项)是什么有一点误解,或者您错过了参数名称区分大小写。
您有两种选择可以使这项工作按预期进行:
- 使用 YAML 中指定的小写参数名称(更改 .rs):
YAML:
...
args:
- config:
short: c
long: config
value_name: CONFIG
help: Specifies the config file to use.
takes_value: true
default_value: "1"
- verbose:
short: v
long: verbose
value_name: VERBOSE
help: Sets verbosity. 0 = silent,> 0 = verbose.
takes_value: true
default_value: "1"
锈:
use clap::{load_yaml,App};
fn main() {
let yaml = load_yaml!("cli.yml");
let matches = App::from_yaml(yaml).get_matches();
let verbosity =
matches.value_of("verbose")
.and_then(|s| s.parse::<u8>().ok())
.unwrap();
println!("{}",verbosity);
}
- 使用代码中指定的大写名称(更改 .yaml): YAML:
...
args:
- config:
short: c
long: config
value_name: CONFIG
help: Specifies the config file to use.
takes_value: true
default_value: "1"
- VERBOSE:
short: v
long: verbose
value_name: VERBOSE
help: Sets verbosity. 0 = silent,> 0 = verbose.
takes_value: true
default_value: "1"
锈
use clap::{load_yaml,App};
fn main() {
let yaml = load_yaml!("cli.yml");
let matches = App::from_yaml(yaml).get_matches();
let verbosity =
matches.value_of("VERBOSE")
.and_then(|s| s.parse::<u8>().ok())
.unwrap();
println!("{}",verbosity);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。