1

Ruby の OptionParser クラスの使い方を学んでいます。パーサーのエラー メッセージの品質を改善するにはどうすればよいですか? hourdayweek、またはのいずれかである必要がある必須オプションを持つフラグの例を次に示しますmonth

opt_parser = OptionParser.new do |opts|
  opts.banner = "Usage: #{$0} [options] username"

  times = [:hour, :day, :week, :month]
  opts.on('-t', '--time=TIME', times,
          'Show messages from the last TIME (defaults to weeks)', "Avaliable options are (#{times.join(', ')})") do |time|
    o.time = time
  end
end

出力例を次に示します。

$ ./script -t
./scraper.rb:195:in `main': missing argument: -t (OptionParser::MissingArgument)
from ./scraper.rb:210:in `<main>'

$ ./script -t not_a_value
./scraper.rb:195:in `main': invalid argument: -t not_a_value (OptionParser::InvalidArgument)
from ./scraper.rb:210:in `<main>'

エラーに許容値を記載してもらいたいのですが、次のようなものですinvalid option for -t 'not_a_value', valid options are hour, day, week, month

4

3 に答える 3

0

確かに、これは次のように簡単です。

opt_parser = OptionParser.new do |opts|
  opts.banner = "Usage: #{$0} [options] username"

  times = [:hour, :day, :week, :month]
  begin
    opts.on('-t', '--time=TIME', times,
      'Show messages from the last TIME (defaults to weeks)', "Avaliable options are (#    {times.join(', ')})") do |time|
    o.time = time
    rescue OptionParser::MissingArgument, OptionParser::InvalidArgument
      $stderr.print "Usage: -t <argument> where argument in [:hour, :day, :week, :month]"
    end
  end
end
于 2014-01-30T20:21:04.413 に答える