我有以下方法太长:
def combine_atoms
@left.each do |chemical|
chemical.chem_species.each do |atom|
if @left_total[atom[0]].nil?
@left_total[atom[0]] = atom[1]
else
@left_total[atom[0]] += atom[1]
end
end
end
@right.each do |chemical|
chemical.chem_species.each do |atom|
if @right_total[atom[0]].nil?
@right_total[atom[0]] = atom[1]
else
@right_total[atom[0]] += atom[1]
end
end
end
end
如何将@left
和@left_total
作为参数传递,以使用ruby将代码行数减少一半?
答案 0 :(得分:3)
您可以使用以下参数将循环从combine_atoms
方法分离为新方法:
def combine_atoms
@left_total = combine_part(@left, @left_total)
@right_total = combine_part(@right, @right_total)
end
def combine_part(part, total)
part.each do |chemical|
chemical.chem_species.each do |atom|
if total[atom[0]].nil?
total[atom[0]] = atom[1]
else
total[atom[0]] += atom[1]
end
end
end
end