我正在尝试使用 OptionParser 读取多个选项并让它们全部作用于单个文件名。 Ex: myprogram.rb -a -b file.txt
如何让 2 个选项共享一个强制参数,同时还允许 -h
之类的东西在没有参数的情况下运行?目前,上面的行只是让 -a
将 -b
作为参数。
optionparser.on("-a FILENAME", "Do this") do |a|
puts a
end
optionparser.on("-b FILENAME", "Do that") do |b|
puts b
end
编辑:
它在做什么:
myprogram.rb -a -b file.txt
=> -b
我需要它做什么:
myprogram.rb -a -b file.txt
=> file.txt
=> file.txt
注意:
这些命令应该能够独立运行,也可以同时运行,类似于 ls -a ..
、ls -l ..
和 ls -a - l ..
但是,如果没有给出文件名,则 NEITHER 命令应该有效。理想情况下,此解决方案应适用于任何 n 个选项。
最佳答案
我现在拥有的是:
alpha=false
beta=false
optionparser.on("-a", "Do this") do |a|
alpha = a
end
optionparser.on("-b", "Do that") do |b|
beta = b
end
if alpha
#do something with ARGV[0]
end
if beta
#do something with ARGV[0]
end
此代码假定在选择选项后,命令行上唯一剩下的应该是文件名。我觉得有一种更优雅的方法可以做到这一点,它考虑到其他可能使命令行困惑的事情,并允许对它们进行错误纠正。
关于Ruby OptionParser : 2 options, 1 个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15813186/