我有三个课程Base::Builder
,Base::Builder::Car
和Base::Builder::House
假设我有这个我想缩短的代码:
Base::Builder::Car
.new(@build_plan)
.generate
Base::Builder::House
.new(@build_plan)
.generate
我做的是:
[Base::Builder::Car, Base::Builder::House].each do |builder|
builder.new(@build_plan)
.generate
end
但我真的不喜欢这种重构,因为像这样,它变得难以理解
您将如何重构此代码?谢谢!
答案 0 :(得分:0)
而不是显式指定所有子类,您可以像这样动态查找它们:
ObjectSpace.each_object(Class).select { |klass| klass < Base::Builder }.each do |builder|
builder.new(@build_plan)
.generate
end
当然,如果您真的想要选择 all 子类,这当然有用。而且它的可读性不高。
这是否实际取决于您的使用案例。