我对红宝石很新。我正在尝试使用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)
但我不知道怎么解决这个问题。
答案 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)