为了减少代码行,我将clap App
移动到另一个文件,如下所示:
use clap::{App, AppSettings, Arg, ArgMatches}; // 2.33.3
use std::path::Path;
fn main() {
let s3m_dir = Path::new("/tmp").join(".s3m");
let matches = get_matches(s3m_dir.display().to_string());
println!("{:#?}", matches);
}
pub fn get_matches(home_dir: String) -> ArgMatches<'static> {
App::new("s3m")
.version(env!("CARGO_PKG_VERSION"))
.setting(AppSettings::SubcommandsNegateReqs)
.after_help(format!("foo bar: {}", home_dir).as_ref())
.arg(
Arg::with_name("config")
.help("config.yml")
.long("config")
.short("c")
.default_value(&format!("{}/.s3m/config.yml", home_dir))
.required(true)
.value_name("config.yml"),
)
.get_matches()
}
我遇到的问题是我不知道如何将参数home_dir
用作default_value
,这里:
.default_value(&format!("{}/.s3m/config.yml", home_dir))
default_value的签名是:
pub fn default_value(self, val: &'a str) -> Self
我怎么能format!("{}/.s3m/config.yml", home_dir
在其他人的一生中通过一个来满足签名?