我目前正在尝试用 Rust 编写一个小命令行应用程序,但我遇到了生命周期的障碍。
extern crate clap;
use self::clap::{App, Arg};
use std::env;
impl<'p> Params<'p> {
fn get_username_arg<'r>() -> Arg<'r, 'r> {
let mut arg = Arg::with_name("Username")
.short("u")
.long("username")
.takes_value(true);
match env::var("USERNAME") {
Ok(username) => {
// How do I pass `username` to default_value?
arg.default_value(username)
}
Err(e) => arg.required(true),
}
}
// More code below...
}
问题是我试图传递username
给默认值方法,这需要str
一个生命周期为'r
. 我试过克隆,但我不知道如何告诉它克隆的生命周期是多少。我尝试了以下几行:
let cln = (&*username).clone::<'r>();
arg.default_value(username)
出于某种原因,它现在告诉我它的username
寿命不够长,尽管自从我克隆了数据以来这并不重要。
所以我的问题是,我该如何编译?
编辑:我想补充一点,除了生命周期参数之外,签名保持不变对我来说很重要。我不介意进行昂贵的操作,例如克隆来完成这项工作。