代码之家  ›  专栏  ›  技术社区  ›  wells

Ruby each Iterator-根据if条件替换要迭代的哈希?

  •  0
  • wells  · 技术社区  · 7 年前

    if SOME CONDITION
      hash_a.each do |x|
        some code in here
      end
    else 
      hash_b.each do |x|
        the same code in here
      end
    

    每个元素大约执行30行代码,所以我的问题是:有没有办法让代码看起来更像这样:

    SOME CONDITION ? hash_a.each do |x| : hash_b.each do |x|
      some code in here 
    end
    

    或者以任何其他方式简化/减少它?

    提前感谢!

    1 回复  |  直到 7 年前
        1
  •  2
  •   Holger Just    7 年前

    您可以直接选择要调用的对象 each 使用三元运算符打开,例如:

    (SOME_CONDITION ? hash_a : hash_b).each do |x|
      # some code in here
    end
    

    如果 SOME_CONDITION 很简单,这是一种很好且干净的方法。如果条件更复杂,则应将条件甚至整个对象选择分别提取到各自的方法中。