如何收紧这个Ruby代码?

时间:2010-02-18 04:42:25

标签: ruby refactoring

我怎样才能更好地写出来。我试图使用注入而不是每个注入,但一直遇到错误。我想收紧一块。

def to_proc
    levels_of_nesting = @fields.zip(@orderings)

    procedure = nil
    levels_of_nesting.each do |field, ordering|
      procedure = proc_for(field, ordering) and next if procedure.nil?
      procedure = procedure.decorate_w_secondary_sorting_level(proc_for(field, ordering))
    end
    procedure
  end

1 个答案:

答案 0 :(得分:3)

我使用map通过proc_for运行所有内容,然后使用inject结合proc。

def to_proc
  @fields.zip(@orderings).map do |field, ordering|
    proc_for(field, ordering)
  end.inject do |prev,curr|
    prev.decorate_w_secondary_sorting_level curr
  end
end

这使得迭代器方法为您执行流控制,避免了虚假的nils和if语句。