2


1

このRubyコードを強化するには?

これをもっとうまく書く方法。 私はそれぞれの代わりに注入を使用しようとしましたが、エラーが発生し続けました。 ブロックを締めたいです。

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 Answer


3


マップを使用して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

これにより、イテレータメソッドがフロー制御を行い、誤ったnilやifステートメントを回避します。