Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将对象作为参数传递_Ruby_Arguments - Fatal编程技术网

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