2016-05-13 3 views
0

У меня есть программа, которая создает электронные письма, что я хочу сделать, когда задан флаг -t, и при этом флаг не указан, по умолчанию что-то, а выводит обычный: <main>': missing argument: -t (OptionParser::MissingArgument)Как по умолчанию информация, если ни один не указан с помощью optparse

Так что мой вопрос заключается в том, если у меня есть этот флаг:

require 'optparse' 

OPTIONS = {} 

OptionParser.new do |opts| 
    opts.on('-t INPUT', '--type INPUT', 'Specify who to say hello to'){ |o| OPTIONS[:type] = o } 
end.parse! 

def say_hello 
    puts "Hello #{OPTIONS[:type]}" 
end 

case 
    when OPTIONS[:type] 
    say_hello 
    else 
    puts "Hello World" 
end 

и я бегу этот флаг без необходимого аргумента INPUT, как я могу получить программу, чтобы из положить Hello World вместо : <main>': missing argument: -t (OptionParser::MissingArgument)?

Примеры:

C:\Users\bin\ruby\test_folder>ruby opt.rb -t hello 
Hello hello 

C:\Users\bin\ruby\test_folder>ruby opt.rb -t 
opt.rb:7:in `<main>': missing argument: -t (OptionParser::MissingArgument) 

C:\Users\bin\ruby\test_folder> 

ответ

0

Я понял, что, добавляя скобки вокруг INPUT я могу предоставить возможность обеспечить входные примеры:

require 'optparse' 

OPTIONS = {} 

OptionParser.new do |opts| 
    opts.on('-t [INPUT]', '--type [INPUT]', 'Specify the type of email to be generated'){ |o| OPTIONS[:type] = o } 
end.parse! 

def say_hello 
    puts "Hello #{OPTIONS[:type]}" 
end 

case 
    when OPTIONS[:type] 
    say_hello 
    else 
    puts "Hello World" 
end 

Выход:

C:\Users\bin\ruby\test_folder>ruby opt.rb -t 
Hello World 

C:\Users\bin\ruby\test_folder>ruby opt.rb -t hello 
Hello hello 

Так если я это сделаю:

require 'optparse' 

OPTIONS = {} 

OptionParser.new do |opts| 
    opts.on('-t [INPUT]', '--type [INPUT]', 'Specify the type of email to be generated'){ |o| OPTIONS[:type] = o } 
end.parse! 

def say_hello 
    puts "Hello #{OPTIONS[:type]}" 
    puts 
    puts OPTIONS[:type] 
end 

case 
    when OPTIONS[:type] 
    say_hello 
    else 
    puts "Hello World" 
    puts OPTIONS[:type] unless nil; puts "No value given" 
end 

можно выводить информацию, представленную, или когда есть не предусмотрено никакой информации я могу выход No value given:

C:\Users\bin\ruby\test_folder>ruby opt.rb -t hello 
Hello hello 

hello 

C:\Users\bin\ruby\test_folder>ruby opt.rb -t 
Hello World 

No value given