简单地说,perform 里面会初始化环境,赋值了一堆变量, 然后里面需要动态获取一个 job,然后这个 job 会在根据这个环境,做一些事情返回。 这样的好处是把互相通过变量耦合在一起的两部分逻辑拆分开来了。
现在需要的是能够获取 perform 的内部环境,丢给 job。 下面是我的一个实现,用到了 ruby2.1 的 binding 方法,好像 2.0 里面 binding 没有 local_variable_get,郁闷。。 大家有什么别的解决方案?
实现上面,job 里面可以考虑用 b[:a], b.a,或者直接访问 a。
class Worker
def self.perform
a = 12
b = 13
job = self.get_job
result = job.run(binding)
end
def self.get_job
Job1.new
end
end
class Job
end
class Binding
def [](key)
self.local_variable_get(key)
end
end
class Job1 < Job
def run(b)
b[:a] * b[:b]
end
end
puts Worker.perform