拍手默认值 - 如何使用它
clap default value - how to use it
第一次玩 Rusts clap crate。
我想知道如何使用命令行选项的默认值
在命令行指定。
鉴于我在 yaml 文件中指定了 default_value
(请参阅下面的代码片段),我预计
如果没有其他值,则 matches.value_of("VERBOSE")
到 return 默认值
在命令行中给出。
相反,我得到:
thread 'main' panicked at 'called Option::unwrap()
on a None
value', 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);
}
第一次玩 Rusts clap crate。 我想知道如何使用命令行选项的默认值 在命令行指定。
鉴于我在 yaml 文件中指定了 default_value
(请参阅下面的代码片段),我预计
如果没有其他值,则 matches.value_of("VERBOSE")
到 return 默认值
在命令行中给出。
相反,我得到:
thread 'main' panicked at 'called
Option::unwrap()
on aNone
value', 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);
}