从类中访问ruby的optparse

时间:2013-12-02 04:16:24

标签: ruby instance-variables optparse attr-accessor

我对红宝石很新。我正在尝试使用optparse来影响我的代码执行方式。我想把optparse的结果输入我的班级,所以我可以在其上建立一些条件。

我花了几个小时的谷歌搜索(optparse,attr_accessor),并尽可能地以一种反复试验的方式实现了结果。

下面,我试图提供一个最小的工作示例。如果任何语法或演示文稿都关闭,我道歉...

require 'optparse'

options = {}
OptionParser.new do |opts|
 opts.banner = "Usage: example.rb [options]"

 opts.on("-v", "--verbose", "Adopt verbose policy") do |v|
  options[:verbose] = v
 end
end.parse!
@options = options

class Chatty

 def initialize
  puts "We're gonna be verbose" if @options[:verbose]
 end

end

Chatty.new

问题是@options在课堂上是零。这会导致NoMethodError。

#  ...in `initialize': undefined method `[]' for nil:NilClass (NoMethodError)

但我不知道怎么解决这个问题。

1 个答案:

答案 0 :(得分:0)

@options是一个实例变量。您在顶级引用的@options@options初始化方法中引用的Chatty不同。

如果您希望在Chatty内可以访问这些选项,则需要将其传递(例如,在实例化时)。例如,而不是:

@options = options

class Chatty

 def initialize
  puts "We're gonna be verbose" if @options[:verbose]
 end

end

Chatty.new
你可以这样做:

class Chatty

  def initialize(options)
    @options = options
    puts "We're gonna be verbose" if @options[:verbose]
  end

end

Chatty.new(options)