如何将命令行参数分配给 Rust 中的静态变量

How do I assign a command line argument to a Static variable in Rust

我是 Rust 的新手。我正在创建一个带有命令行参数的 Rust 二进制文件。我希望能够将命令行参数字符串用作整个应用程序的静态常量字符串。

这样做的正确方法是什么?

如果我声明一些静态的东西并更新它,我必须在我使用它的任何地方使用unsafe

如果我像下面那样使用 lazy_static,我不确定如何使本地获取的 &argv[1] 可以访问在 main

中声明的闭包
lazy_static! {
    static ref MYID: String = get_arg_value();
}

fn main() {

    let argsv: Vec<String> = std::env::args().collect();
    let get_arg_value = || -> String { argsv[1] }

}

把代码放在lazy_static!:

lazy_static! {
    static ref MID: String = {
        let argsv: Vec<_> = std::env::args().collect();
        argsv[1]
    };
}

但是你会得到一个错误“无法移出索引”。所以克隆字符串(它是 one-time 初始化所以性能无关紧要):

lazy_static! {
    static ref MID: String = {
        let argsv: Vec<_> = std::env::args().collect();
        argsv[1].clone()
    };
}

请注意,您并不是真的需要 Vec - 您可以使用迭代器:

lazy_static! {
    static ref MID: String = std::env::args().nth(1).unwrap();
}

另请注意,最好使用once_cell as it's going to be part of std