Trong OptionParser tôi có thể thực hiện một tùy chọn bắt buộc, nhưng nếu tôi bỏ qua giá trị đó, nó sẽ lấy tên của bất kỳ tùy chọn nào sau đây làm giá trị, vặn phần còn lại của phân tích cú pháp dòng lệnh. Đây là một trường hợp thử nghiệm âm vang các giá trị của các tùy chọn:Làm cách nào để xử lý một đối số bắt buộc bị thiếu trong Ruby OptionParser?
$ ./test_case.rb --input foo --output bar
output bar
input foo
Bây giờ bỏ qua các giá trị cho các tùy chọn đầu tiên:
$ ./test_case.rb --input --output bar
input --output
Có một số cách để ngăn chặn nó dùng một tên khác tùy chọn như một giá trị? Cảm ơn!
Đây là mã test:
#!/usr/bin/env ruby
require 'optparse'
files = Hash.new
option_parser = OptionParser.new do |opts|
opts.on('-i', '--input FILENAME', 'Input filename - required') do |filename|
files[:input] = filename
end
opts.on('-o', '--output FILENAME', 'Output filename - required') do |filename|
files[:output] = filename
end
end
begin
option_parser.parse!(ARGV)
rescue OptionParser::ParseError
$stderr.print "Error: " + $! + "\n"
exit
end
files.keys.each do |key|
print "#{key} #{files[key]}\n"
end
Ừ ... mà giải quyết trường hợp thử nghiệm, nhưng tôi thực sự hy vọng tôi có thể làm điều này trong khối OptionParser.new nơi mà nó thuộc về. Bạn phải có khả năng bao gồm một/mẫu/trong một cuộc gọi on() mà bất kỳ đối số nào phải khớp - nhưng tôi chưa nhận được tính năng này. Cảm ơn! –