首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有默认选项列表的OptionParser

使用带有默认选项列表的OptionParser
EN

Stack Overflow用户
提问于 2018-02-08 04:13:34
回答 1查看 302关注 0票数 0

我正在尝试使用OptionParser创建一个默认的opts列表,该列表可以在共享相同opts的单独文件中使用。例如:

文件1:

代码语言:javascript
复制
default = OptionParser.new do |opts|
  opts.banner = "This banner is shared by multiple files"
  opts.on("-d", "--debug [level]", "debug logging level: critical, error, warning, info, debug1, debug2") do |opt|
    $debug_level = opt
  end
end
default.parse!(argv)

文件2:

代码语言:javascript
复制
options = OptionParser.new do |opts|
  opts.on("-v", "--version [release]", "release version") do |opt|
    release = opt
  end
end
options.parse!(argv)

不需要在每个文件中重复opts.banner和-d选项,我希望文件2能够将本地选项(-v)与默认值(opts.banner,-d)组合在一起。把它完整地写出来会是这样的:

代码语言:javascript
复制
options = OptionParser.new do |opts|
  opts.banner = "This banner is shared by multiple files"
  opts.on("-d", "--debug [level]", "debug logging level: critical, error, warning, info, debug1, debug2") do |opt|
    $debug_level = opt
  end
  opts.on("-v", "--version [release]", "release version") do |opt|
    release = opt
  end
end
options.parse!(argv)

我见过一些子命令之类的东西,但从来没有任何东西严格地表明可以组合opts或在文件中使用它们。

EN

回答 1

Stack Overflow用户

发布于 2018-02-13 23:28:25

对于任何需要做类似事情的人,我可以用以下方法来做:

base.rb:

代码语言:javascript
复制
class Base
    # Defines default arguments for commands
    def defaults(argv, &block)

      options = {}

      option_parser = OptionParser.new do |opts|

        opts.banner = "Usage: Define default usage"
        opts.on("-d", "--debug [level]", "debug logging level: critical, error, warning, info, debug1, debug2") do |opt|
          options["level"] = opt
        end
        opts.on("-v", "--version [release]", "release version") do |opt|
          options["release"] = opt
        end
        yield(opts) if block_given?
      end
      option_parser.parse!(argv)
      return options
    end

command.rb:

代码语言:javascript
复制
class Command < Base
def run(argv)

  options = defaults(argv) do |opts|
    opts.banner = "new banner message"
    opts.on("-t", "--test[value]", "test value") do |opt|
      options["value"] = test
    end
  end

这将需要' require‘或'require_relative’才能使命令类能够继承基类,但这会按预期工作,如果您不需要缺省值中的任何内容,则只需使用

代码语言:javascript
复制
options = defaults(argv) do
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48672477

复制
相关文章

相似问题

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