1

我有以下方法太长了:

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​​ 将代码行数减少一半?

4

1 回答 1

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
于 2013-02-13T08:08:20.497 回答