【发布时间】:2022-07-02 16:11:12
【问题描述】:
我使用clap crate 来解析我的代码中的参数。 我关于定义和解析参数的代码的最小结构如下。
use clap::builder::Command;
use clap::{Arg, ArgMatches};
let matches = Command::new("test")
.arg(Arg::new("mass")
.short('m')
.takes_value(true))
.get_matches()
let mass: f64 = *matches.get_one::<f64>("mass").unwrap();
但我遇到了一个错误“线程'main'在'mass的定义和访问不匹配时惊慌失措。无法向下转换为f64,需要向下转换为alloc::string::String”
我可以通过使用 parse() 从 String 到 f64 来修复它。
let mass: f64 = *matches.get_one::<String>("mass").unwrap().parse().unwrap();
我想知道为什么只有 f64 不能被 get_one 函数解析与 boolean 或 usize 的情况不同。
【问题讨论】:
-
提示一下,第一个代码sn -p可以构建成功,但是当你像
./binary -m 0一样运行它时,它只会panic -
是的。我面临的错误是恐慌。但是,我不知道为什么以及如何解决它。