我经常发现自己这样做:
optparse = OptionParser.new do |opts|
options[:directory] = "/tmp/"
opts.on('-d','--dir DIR', String, 'Directory to put the output in.') do |x|
raise "No such directory" unless File.directory?(x)
options[:directory] = x
end
end
如果我可以指定Dir
或Pathname
而不是String
,那就更好了。是否有一种模式或我的Ruby式方式来做到这一点?
答案 0 :(得分:5)
您可以将OptionParser配置为接受(例如)路径名
require 'optparse'
require 'pathname'
OptionParser.accept(Pathname) do |pn|
begin
Pathname.new(pn) if pn
# code to verify existence
rescue ArgumentError
raise OptionParser::InvalidArgument, s
end
end
然后您可以将代码更改为
opts.on('-d','--dir DIR',Pathname, 'Directory to put the output in.') do |x|
答案 1 :(得分:0)
如果您正在寻找一种Ruby式的方式,我建议您尝试Trollop。
从版本1.1o开始,您可以使用接受文件名,URI或字符串:io
或stdin
的{{1}}类型。
-
如果您需要路径名,那么它不是您想要的。但是如果你想要阅读文件,那么它是一种强大的抽象方式。