我有一个看起来像这样的小 DSL:
ActivityLogger.log do
activity('27-06-2012') do
eat do |act|
act.duration = 15
act.priority = 5
end
end
end
我想重构它,使它丢失最里面的块中的块参数,所以它看起来像这样:
ActivityLogger.log do
activity('27-06-2012') do
eat do
duration = 15
priority = 5
end
end
end
该#eat
方法实例化一个 Log 对象:
def eat(&block)
@logs << Log.new(Eat, &block)
end
Log 的构造函数self
在最后一行产生:
def initialize(activity, &block)
@activity = activity
yield self
end
在我看来,这就是问题所在。我已经尝试过instance_eval
在#eat
方法中使用(参见下面的链接#2)和yield
完全从日志的构造函数中删除语句(链接#3),但是这些方法都不起作用(创建了日志对象,但没有得到它#duration
和#priority
方法集)。
以下是链接:
谢谢!