2016-12-31 9 views
3

私が継承したコードを浄化していますが、この行がありますが、正直言って、私に教えてくれるRubocopが間違っているのか分かりません。私はちょうどこの警官を過ぎて取得しようとしていますrubocopの犯罪が何が間違っているのかわからない

enter image description here

total_cost = tmp_totals.inject { |total, tmp_val| total + tmp_val } 

私はこのようになります。このエラー

app/models/item_count.rb:58:40: C: Name inject block params |acc, elem| 

を取得しています。それは私に修正するように何を言っているすべてのアイデア?

+0

'total_cost = tmp_totals.inject(:+)'または 'total_cost = tmp_totals.sum'で行全体を置き換えないのはなぜですか?本当に質問に答えるわけではありませんが、それはナンセンスの曲がりを通らずにふきとりを締めさせるでしょう。 –

+1

リストに 'inject'や' reduce'を実行するときに、空のリスト条件を扱うデフォルト値を持つことを忘れないでください: 'inject(0){...}'。 – tadman

答えて

5

デフォルトではRubocopはとelemの名前をtotaltmp_valの代わりに指定します。独自のrubycop.ymlで必要な変数を設定することができます。デフォルトは次のように設定されています。

Style/SingleLineBlockParams: 
    Methods: 
    - reduce: 
     - acc 
     - elem 
    - inject: 
     - acc 
     - elem 
+0

これはなぜコード品質を改善するのでしょうか?私は 'total_cost = totals.inject {| sum、total | sum + total} 'は、' total_cost = totals.inject { acc、elem | acc + elem} 'である。 – Smek

1

Rubocopはこれでは少し硬すぎます。 2番目のパラメータがmemまたはacc IMHOでないことを確認するだけです。 ちょうど使用:

total_cost = tmp_totals.inject(0) { |acc, elem| acc + elem }

それとも

total_cost = tmp_totals.inject(0, :+)

をRubocopは文句ないだろう、とあなたは空の配列のための0の代わりにnilを取得します。

あなたができた、文句何rubocopわからない場合:

  • コードはまだ

    を動作するか確認してください、あなたのコードが

  • 使用rubocop -a script.rb

  • チェックを約束されていることを確認

  • 差異を確認してください

+3

AFAIK 'tmp_totals.inject(0、:+)'も動作し、 '&:+'より速くなります。 – Hauleth

関連する問題