我陷入了一种完全愚蠢的境地。当我使用下面的代码段时, 尽管我的命令行是“./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
答案 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 #