用 ruby 编写一个 DSL 方法,该方法将创建一个带有参数的方法



我正在尝试为后台工作线程类编写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

这有什么意义吗? 希望这里有人能为我指出正确的方向。

你在寻找这样的东西吗:

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>

像这样的东西?

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

最新更新