0

我有一个带有一组相对广泛的命令行参数的 Ruby 应用程序。我想禁止一些选项的“短”变体,以便它们只能以长(“双破折号”)形式使用。

我可以以某种方式抑制某些选项的短破折号变体吗?

更新 2013/10/08

事实证明,确实省略了简短的变体!但是,对我来说不是,因为出于某种原因,在我的程序中,所有短键都以空格为前缀。所以一个像这样的简单案例:

require 'optparse'

op = OptionParser.new
op.on(" -f", "--from FORMAT", "Use the specific format") {}
op.on("--flip", "Do a flip") {}
op.parse!

导致异常:

ruby why.rb -f some-foos
why.rb:17:in `<main>': ambiguous option: -f (OptionParser::AmbiguousOption

而给出的建议(注意开场报价后没有空格):

require 'optparse'

OptionParser.new do |opts|
  opts.on("-d", "--ding DING", "Should not conflict with dangerous-option") do
    puts "ding set!"
  end
  opts.on("--dangerous-option", "Set dangerous option") do |v|
    puts "dangerous option set to #{v}"
  end
end.parse!

工作正常。

$ruby dang.rb -d xyz
ding set!

因此,感谢p11y通过一个工作示例为我指明了正确的方向。此外,如果这个“前导空格”到位, optparse 不会抱怨 - 但它会改变你的短键的解释(或者,更好地说,会忽略它们并将它们显示为你的帮助热线的一部分! - 仍然请改用自动生成的密钥)。

4

1 回答 1

0

只需删除简短的形式:

require 'optparse'

OptionParser.new do |opts|
  opts.on("--dangerous-option", "Set dangerous option") do |v|
    puts "dangerous option set to #{v}"
  end
end.parse!

 

$ ruby foo.rb -h
Usage: foo [options]
        --dangerous-option           Set dangerous option

$ ruby foo.rb --dangerous-option
dangerous option set to true
于 2013-10-08T08:32:39.720 回答