1

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

3 回答 3

2

我是一名 Python 程序员,而不是一名 Ruby 程序员,但为此浏览Ruby 文档中的示例,我会说你所拥有的默认行为是充当布尔值。您需要为其指定更多参数才能实际存储该值。

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

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

于 2009-04-20T02:32:48.603 回答
0

我想你想opt.parse!在某个地方打电话。

于 2009-04-20T02:26:17.947 回答
0

正如您在optparse.rb(in /usr/local/rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/optparse.rbfor me)的代码文档中看到的那样==== 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 #

因此

opt.on('-s','--service [String]','twitter (tw) or identica (id)') do |val| 
于 2019-04-10T21:51:23.413 回答