我正在尝试为后台工作者类写一个DSL,而且我在尝试完成某些事情时有点困难。
理想情况下,我应该能够像以下一样写一份工作工作者......
job :job_name do |param1, param2|
puts param1
end
现在,在我的工人超类课程中,我正在做这样的事情......
class Worker
def self.job(job_name, &block)
define_method job_name do
# stuck
end
# do some additional stuff here
end
end
我想要做的是定义一个方法,该方法可以访问原始作业调用中使用的块参数,因此我可以通过以下方式解除此作业:
Worker.new.job_name(param1, param2)
创建的方法应该在功能上等同于:
def job_name(param1, param2)
puts param1
end
这有什么意义吗?希望有人能指出我正确的方向。
答案 0 :(得分:5)
你是否寻找这样的东西:
class Worker
def self.job(job_name, &block)
define_method job_name, &block
# do some additional stuff here
end
end
Worker.job(:my_job) do |a,b|
puts "Called #{__method__} with param <#{a}> and <#{b}>"
end
#~ What I want to do is define a method that has access to the block arguments that were used in the original job call, so I could fire this job off with:
Worker.new.my_job(:param1,:param2) #-> Called my_job with param <param1> and <param2>
答案 1 :(得分:1)
这样的东西?
class Worker
def self.job(job_name, &block)
define_method job_name, block
end
end
Worker.job("foo"){ |x,y| puts "#{x} + #{y}" }
Worker.new.foo(1,2) # => 1 + 2