ruby - 传递一个对象作为参数

标签 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

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

最佳答案

您可以将一个循环从 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

关于ruby - 传递一个对象作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14848598/

相关文章:

ruby - 使用 Ruby 和正则表达式就地更改 XML 数据

ruby - 有什么方法可以重用字符串?

ruby - 在 ruby​​ 中使用正则表达式在引号中查找字符串

c - 在 C 中使用引用传递修改二维数组

将数组转换为函数参数

ruby-on-rails - Ruby 在数组中排序哈希时遇到问题

ruby-on-rails - Rails:BCrypt::Errors::InvalidHash(无效散列)设计 1.5.4 Rails 2.2.5

django - 将附加参数传递给 django 登录名和模板

arguments - 仅在使用 Intel Visual Fortran 编译时子程序调用堆栈溢出,在使用 Compaq Visual Fortran 编译时正常

go - EXE 后的命令行参数