Ruby 将对象作为参数传递
我有以下方法太长了:Ruby 将对象作为参数传递,ruby,arguments,Ruby,Arguments,我有以下方法太长了: 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 @
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\u total
作为参数传递,以使用ruby将代码行数减少一半?您可以将combine\u 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