16

APIdockによると、RubyメソッドEnumerable#each_with_objectは非推奨です。

それが間違っていない限り(「Railsの最新の安定バージョンで非推奨」と言って、非推奨になっているのはRailsのモンキーパッチである可能性があるのではないかと疑わしい)、なぜ非推奨なのですか?

4

3 に答える 3

51

これはむしろ、あなたの質問の前提の否定に対する答えであり、それが何であるかを確認するためでもあります.


このeach_with_object方法により、余分なキーストロークを節約できます。配列からハッシュを作成するとします。ではinject、次の追加が必要ですh

array.inject({}){|h, a| do_something_to_h_using_a; h} # <= extra `h` here

しかしeach_with_object、を使用すると、その入力を保存できます。

array.each_with_object({}){|a, h| do_something_to_h_using_a} # <= no `h` here

そのため、可能な限り使用することをお勧めしますが、制限があります。「ループを使わずに配列内のカウントでグループ化する方法」でも答えたように、

  • 初期要素が , , などの可変オブジェクト場合は、 を使用できます。ArrayHashStringeach_with_object
  • 初期要素が などの不変オブジェクトのNumeric場合、次を使用する必要がありますinject

    sum = (1..10).inject(0) {|sum, n| sum + n} # => 55
    
于 2011-03-30T03:01:53.527 に答える
13

Ruby トランクのソース コードには注記がありません。メソッドまだそこにあり (そのページの主張に反して)、私が見つけたメーリング リストではそれについての話はありませんでした。

APIdock は単純に混乱しています。APIdock が非推奨になったと言っているポイントは、実際には (単に ActiveSupport バックポート拡張機能というよりも) 標準ライブラリのメソッドを含む最も初期のバージョンであり、メソッドを持つ Ruby を使用している場合、Rails はそのバージョンを無効にします。プロジェクト間で移行する方法に混乱しているようです。

于 2011-03-30T02:57:51.377 に答える
12

うーん、それは少し奇妙に思えます。

Agile Rails でさえどこかに書いています:

「Ruby 1.9 のeach_with_objectメソッドは非常に便利であることがわかったため、Rails のクルーが Ruby 1.8 にバックポートしました」.

これは APIdock のエラーのようですか? それがなぜなのか、私には理由がわかりません。

于 2011-03-30T02:31:16.780 に答える