我正在尝试使用OptionParser创建一个默认的opts列表,该列表可以在共享相同opts的单独文件中使用。例如:
文件1:
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:
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)组合在一起。把它完整地写出来会是这样的:
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或在文件中使用它们。
发布于 2018-02-13 23:28:25
对于任何需要做类似事情的人,我可以用以下方法来做:
base.rb:
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
endcommand.rb:
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’才能使命令类能够继承基类,但这会按预期工作,如果您不需要缺省值中的任何内容,则只需使用
options = defaults(argv) do
endhttps://stackoverflow.com/questions/48672477
复制相似问题