Ruby 将挡块传递到包括挂钩的模块

Ruby 将挡块传递到包括挂钩的模块,ruby,Ruby,我想包括一个同时传递配置块的模块 现在我有这样的东西 class Check include Zabase::ObjectPrinter pp_values :title end 因为我不想污染Check类的名称空间,所以我想使用如下DSL块: class Check include Zabase::ObjectPrinter do pp_values :title end # calling pp_values here should fail end

我想包括一个同时传递配置块的模块

现在我有这样的东西

class Check
  include Zabase::ObjectPrinter 
  pp_values :title 
end
因为我不想污染
Check
类的名称空间,所以我想使用如下DSL块:

class Check
  include Zabase::ObjectPrinter do
     pp_values :title 
  end

  # calling pp_values here should fail
end

有可能实施这一点吗?我已经看到,
self.included
没有收到块。

实现这一点的常用方法是:

module Zabase::ObjectPrinter

  # ...

  def self.included base
    base.extend ClassMethods
  end

  module ClassMethods
    def zabase_configure &block
      instance_eval(&block) if block_given?
    end
  end 
end
然后

class Check
  include Zabase::ObjectPrinter

  zabase_configure do
    ...
  end
end

实现这一目标的常见方法是:

module Zabase::ObjectPrinter

  # ...

  def self.included base
    base.extend ClassMethods
  end

  module ClassMethods
    def zabase_configure &block
      instance_eval(&block) if block_given?
    end
  end 
end
然后

class Check
  include Zabase::ObjectPrinter

  zabase_configure do
    ...
  end
end