我有一个带有一组相对广泛的命令行参数的 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 不会抱怨 - 但它会改变你的短键的解释(或者,更好地说,会忽略它们并将它们显示为你的帮助热线的一部分! - 仍然请改用自动生成的密钥)。