1

我对红宝石还很陌生。我正在尝试使用 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)

但我不知道如何解决这个问题。

4

1 回答 1

0

@options是一个实例变量。@options您在顶层引用的内容与您@optionsChatty初始化方法中引用的内容不同。

如果您希望在 中可以访问这些选项,则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)
于 2013-12-02T04:32:30.753 回答