我想要包含一个传递配置块的模块。
现在我有类似的东西
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
没有收到阻止。
答案 0 :(得分:3)
实现这一目标的常用方法是:
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