gpt4 book ai didi

rust - 如何在stuctopt定义中访问运行时定义的变量?

转载 作者:行者123 更新时间:2023-12-03 11:30:58 24 4
gpt4 key购买 nike

我希望能够使用变量的值(或者更好的是,返回function(arg))作为使用structopt定义的CLI程序的about字符串。最终目标是一个完全本地化的CLI,该CLI可检测系统语言或ENV var并加载本地化的字符串,这些字符串将被烘焙到--help消息中,等等。

默认情况下,它使用文档注释:

/// My about string
#[derive(StructOpt)]
struct Cli {}

我发现我可以传递一个手动输入的字符串来代替:

#[derive(StructOpt)]
#[structopt(about = "My about string")]
struct Cli {}

距离我们只有一步之遥,但是我真正想做的是传递一个变量:

let about: &str = "My about string";
#[derive(StructOpt)]
#[structopt(about = var!(about))]
struct Cli {}

最后一块是伪代码,因为我不知道要使用什么语法来实现这一目标。最后,我不仅需要一个字符串切片,而且我认为这是一个起点。

如何通过这样的值传递给structopt?我是否需要以某种方式访问​​基础的拍手界面?

最佳答案

StructOpt只是在拍手上添加了一个派生宏和一个对应的特征。拍手箱具有set the about message at runtime的功能,因此我们只需要添加它即可。如果我们查看how from_args works,我们可以看到它在将其变成用户定义的结构之前创建了拍子App结构。

因此,要做您想做的事情:

use structopt::StructOpt;

fn get_localized_about() -> &'static str {
"localized string"
}

#[derive(Debug, StructOpt)]
struct Foo {}

fn main() {
let foo = Foo::from_clap(&Foo::clap().about(get_localized_about()).get_matches());
println!("{:#?}", foo);
}

关于rust - 如何在stuctopt定义中访问运行时定义的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61463494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com