小编Jon*_*eau的帖子

克隆字符串到特定生命周期

我目前正在尝试在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...
}
Run Code Online (Sandbox Code Playgroud)

问题是我正在尝试传递username默认值方法,该方法需要str具有生命周期的方法'r.我尝试克隆,但我无法弄清楚如何告诉它克隆的生命周期是什么.我尝试了以下几点:

let cln = (&*username).clone::<'r>();
arg.default_value(username)
Run Code Online (Sandbox Code Playgroud)

出于某种原因,它现在告诉我,username活得不够长,即使自从克隆数据以来它也无关紧要.

所以我的问题是,如何进行编译?

编辑:我想补充一点,对我来说重要的是签名与生命周期参数保持一致.我不介意做一些昂贵的操作,比如克隆来完成这项工作.

ownership-semantics rust

3
推荐指数
1
解决办法
1347
查看次数

标签 统计

ownership-semantics ×1

rust ×1