首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在stuctopt定义中访问运行时定义的变量?

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

Stack Overflow用户
提问于 2020-04-28 00:22:13
回答 1查看 126关注 0票数 2

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

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

代码语言:javascript
复制
/// My about string
#[derive(StructOpt)]
struct Cli {}

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

代码语言:javascript
复制
#[derive(StructOpt)]
#[structopt(about = "My about string")]
struct Cli {}

这更近了一步,但我真正想做的是传递一个变量:

代码语言:javascript
复制
let about: &str = "My about string";
#[derive(StructOpt)]
#[structopt(about = var!(about))]
struct Cli {}

最后一个代码块是伪代码,因为我不知道使用什么语法来实现这一点。最后,我需要的不仅仅是一个单独的字符串片,但我认为这是一个开始。

如何将这样的值传递给structopt?我需要以某种方式访问底层的clap界面吗?

EN

回答 1

Stack Overflow用户

发布于 2020-04-28 03:56:32

StructOpt只是在clap上添加了一个派生宏和一个相应的特征。clap crate有一个set the about message at runtime函数,所以我们只需要添加它。如果我们查看how from_args works,我们可以看到它在将其转换为用户定义的结构之前创建了clap App结构。

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

代码语言:javascript
复制
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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61463494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档