optpase возвращает истинный класс, в то время как строка указана в аргументах строки cmd - PullRequest
1 голос
/ 20 апреля 2009

Я застрял в совершенно глупой ситуации. Когда я использую фрагмент ниже, несмотря на то, что моя командная строка "./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 ]

2 голосов
/ 20 апреля 2009

Я программист на 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 должен иметь назначенную услугу. Я думаю ... Привет, это Руби. ; -)

0 голосов
/ 11 апреля 2019

Как вы можете видеть в документации кода optparse.rb (для меня /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 #

Таким образом

opt.on('-s','--service [String]','twitter (tw) or identica (id)') do |val| 
0 голосов
/ 20 апреля 2009

Я думаю, вы хотите позвонить куда-нибудь opt.parse! в блок.

...