optpase返回true类,而cmd行参数中提供了string

时间:2009-04-20 00:59:10

标签: ruby optparse

我陷入了一种完全愚蠢的境地。当我使用下面的代码段时, 尽管我的命令行是“./the_script.rb -s serv”而我检查 代码中的服务变量的值,它总是被采用 由optparse构成布尔类。所以我无法从中得到我的字符串 命令行......

任何想法?

opt = OptionParser.new do |opt|

 opt.on('-s','--service','twitter (tw) or identica (id)') do |val| 
   service = val.to_s 
 end

end

3 个答案:

答案 0 :(得分:2)

我是一名Python程序员,而不是Ruby程序员,但是为了这个浏览Ruby docs中的示例,我会说默认行为就是充当布尔值。您需要为其指定更多参数以实际存储该值。

opts.on("-s", "--service [SERVICE]", [:twitter, :identica], "Select a service (Twitter or Identica)" do |service|
    options.service = service
end

然后options.service应该有指定的服务。我想......嘿,这是Ruby。 ; - )

答案 1 :(得分:0)

我想你想在某个地方叫opt.parse!

答案 2 :(得分:0)

您可能会在optparse.rb的{​​{1}}(对于我来说,在/usr/local/rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/optparse.rb的代码文档中)中看到,您必须指定第二个参数的字符串。 ==== Using Built-in Conversions方法:

on

因此

 173 # ==== Using Built-in Conversions
 174 #
 175 # As an example, the built-in +Time+ conversion is used. The other built-in
 176 # conversions behave in the same way.
 177 # OptionParser will attempt to parse the argument
 178 # as a +Time+. If it succeeds, that time will be passed to the
 179 # handler block. Otherwise, an exception will be raised.
 180 #
 181 #   require 'optparse'
 182 #   require 'optparse/time'
 183 #   OptionParser.new do |parser|
 184 #     parser.on("-t", "--time [TIME]", Time, "Begin execution at given time") do |time|
 185 #       p time
 186 #     end
 187 #   end.parse!
 188 #