5

私は現在、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、データのクローンを作成したので問題にならないはずなのに、それが十分に長く生きていないことを教えてくれます。

だから私の質問は、これをコンパイルするにはどうすればよいですか?

編集:署名が有効期間パラメーターとは別に同じままであることが私にとって重要であることを追加したいと思います。これを機能させるために、クローン作成などの高価な操作を行ってもかまいません。

4

3 に答える 3