我有一个如下课程:
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
任务。
如果我在puts Foo.variable
定义中method?
,那么我看到在"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
同样的问题。
答案 0 :(得分:1)
我认为你可能正在寻找一个类变量。
的内容class Foo
@@bar = 0
def increment
@@bar += 1
end
def bar
@@bar
end
end
f = Foo.new
f.bar
=> 0
f.increment
f.bar
=> 1
g = Foo.new
g.bar
=> 1
g.increment
g.bar
=> 2
f.bar
=> 2
用双@
(在本例中为@@bar
)表示的类变量通常被视为bad practice,因此使用时请务必小心。