我有两个需要重构的片段
ActivityA
我知道我可以将其缩减为
if condition
array.each do |a|
... # 1st block
var1 = ClassA.new.methodA
... # 2nd block
end
else
array.each do |a|
... # 1st block
var1 = ClassB.new.methodB
... # 2nd block
end
但是这个数组非常大(大约10,000),所以必须对每个元素进行array.each do |a|
... # 1st block
var1 = condition ? ClassA.new.methodA : ClassB.new.methodB
... # 2nd block
end
多次检查。有人知道最优雅的重构方法吗?
condition
有了这个,我必须用第一个数组元素作为参数初始化变量。 (var1 = method1(array.first)
array.[1..-1].each #Loop from 2nd to last element
var1 = var1 + method1(a)
end
ClassA(var1)
表示长链ActiveRecord范围)
这些都是次要的,但我是Ruby的初学者,我认为更好的方法是检查更多使用Ruby的方式。
提前谢谢
答案 0 :(得分:1)
λ = condition ? ClassA.new.method(:methodA) : ClassB.new.method(:methodB)
array.each do |a|
... # 1st block
var1 = λ.(a)
... # 2nd block
end
旁注:三元运算符不值得这样的重构;它对生产力的影响是零。另一方面,类实例创建是值得的。
var1 = array.reduce { |memo, e| memo + method1(e) }
答案 1 :(得分:0)
只需在开始时将ClassName和MethodName整理出来,然后在循环中使用以下内容。
"ClassName".constantize.new.send('MethodName', parameter)