【发布时间】:2016-10-26 04:01:13
【问题描述】:
我有一个类似如下的课程:
class Foo
@variable = {}
class << self
attr_accessor :variable
end
def self.run(file)
# do stuff
end
end
我有一个 RSpec 类型的方法,如下所示:
def method?
Foo.variable[@name] = {}
Foo.variable[@name][:variable_two] = 'string'
true
end
我有一个 rspec 和自定义任务,如下所示:
RSpec::Core::RakeTask.new("rspec-#{spec}".to_sym) do |task|
task.pattern = spec
end
desc "do stuff"
task spec do
Rake::Task["rspec-#{spec}".to_sym].invoke
Foo.run(spec)
end
我正在使用 rake 执行 spec 任务。
如果我在method? 定义中执行puts Foo.variable,那么我看到在"rspec-#{spec}".to_sym 的RSpec 子任务期间,Foo.variable 散列被完全和完美地填充,正如我所期望的那样。但是,一旦Foo.run 在 rspec rake 任务之后执行,Foo.variable 哈希就会变为空。我尝试了许多不同的方法来将 rspec rake 任务期间生成的值传输或保留到 Foo.run 方法,上面的代码基本上是我每次尝试后返回的模板。
哪种算法让我能够在 rspec rake 任务期间保留分配给变量的值,以供之后执行的另一个方法使用?
尝试过的类变量建议:
class Foo
@@variable = {}
def self.variable
@@variable
end
def self.run(file)
# do stuff
end
end
同样的问题。
【问题讨论】:
-
这是一个非常奇特的类定义。如果您使用实例,您的
initialize在哪里?如果不是,请尝试使用cattr_accessor来定义它。 -
我没有该类的实例。我刚刚搜索了
cattr_accessor,因为我从未听说过它并找出原因:它是rails。这只是红宝石。 -
如果你有一个没有实例的类,那么你想要的是
module。mattr_accessor与attr_accessor类似,但用于模块。这些在 ActiveSupport 中,但也提供独立版本。