如果没有使用optparse给出信息,如何默认信息

时间:2016-05-13 19:41:11

标签: ruby default-value optparse

我有一个创建电子邮件的程序,我想要做的是当给出-t标志并且没有给出带有标志的参数时,默认为某些东西,而是输出通常的:{{1} }

所以我的问题是,如果我有这面旗帜:

<main>': missing argument: -t (OptionParser::MissingArgument)

我运行此标志时没有必需的参数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)

1 个答案:

答案 0 :(得分: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