首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析docopt参数类型(任何语言)

解析docopt参数类型(任何语言)
EN

Stack Overflow用户
提问于 2015-01-29 08:39:26
回答 1查看 908关注 0票数 0

我有一个用例,用户提供一个docopt字符串,并在此基础上生成一些代码。所以我不知道我前面的docopt字符串。

对于某些“参数类型”(不是数据类型),我希望生成各种代码。

在下面,我将区分“类型”和“数据类型”。对于docopt参数--arg=DEGREES和argv输入--arg=10--arg的“类型”为DEGREES,而数据类型为integer。值为10

用户可能会给我以下docopt字符串:

代码语言:javascript
复制
Naval Fate.

Usage:
  naval_fate --dir=FILE [--speed=ABC]

Options:
  --dir=FILE   Moored (anchored) mine.
  --speed=ABC  Speed in knots [default: 10].

除了像往常一样解析这个docopt字符串之外,我还试图找出参数dirspeed所要求的“类型”。我想知道dirFILE类型,speedABC类型。

示例:

鉴于上述docopt字符串和argv字符串naval_fate --dir=/tmp --speed 1234,我希望不仅访问值和数据类型(<key> => <value,datatype>),而且访问“配置类型”(<key> => <value,datatype,argtype>,即类似于以下内容的内容):

FILE dir => val:/tmp,数据类型:String类型:

ABC speed => val:1234,数据类型:Integer类型:

docopt的任何(托管)实现都是可以接受的,包括Python的实现,不过最好是用编译语言寻找解决方案,不管是C、Go、Rust等等。

EN

回答 1

Stack Overflow用户

发布于 2015-01-29 12:15:38

对于铁锈主义来说,这很容易

代码语言:javascript
复制
#![allow(unstable)]

extern crate docopt;

use docopt::Docopt;

static USAGE: &'static str = "
Naval Fate.

Usage:
    naval_fate ship --dir=FILE [--speed <kn>]
    naval_fate (-h | --help)

Options:
    -h --help     Show this screen.
    --speed <kn>  Speed in knots [default: 10].
    --dir=FILE    Moored (anchored) mine.
";

fn main() {
    let args = Docopt::new(USAGE)
                      .and_then(|d| d.parse())
                      .unwrap_or_else(|e| e.exit());
    println!("Type of 'ship': {:?}", args.find("ship"));
    println!("Type of '--dir': {:?}", args.find("--dir"));
    println!("Type of '--speed': {:?}", args.find("--speed"));
}

其中产出:

代码语言:javascript
复制
$ ./target/scratch ship --dir /tmp --speed 1234                                        
Type of 'ship': Some(Switch(true))                                                                       
Type of '--dir': Some(Plain(Some("/tmp")))                                                               
Type of '--speed': Some(Plain(Some("1234"))) 

关键是find的返回类型是Value,这是一种代数数据类型:http://burntsushi.net/rustdoc/docopt/enum.Value.html --所以通过构造,您可以免费得到参数的“类型”。

请注意,这将适用于Docopt使用字符串中的任何“参数”,即使它没有传递到参数列表中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28210260

复制
相关文章

相似问题

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