APIdockによると、RubyメソッドEnumerable#each_with_object
は非推奨です。
それが間違っていない限り(「Railsの最新の安定バージョンで非推奨」と言って、非推奨になっているのはRailsのモンキーパッチである可能性があるのではないかと疑わしい)、なぜ非推奨なのですか?
APIdockによると、RubyメソッドEnumerable#each_with_object
は非推奨です。
それが間違っていない限り(「Railsの最新の安定バージョンで非推奨」と言って、非推奨になっているのはRailsのモンキーパッチである可能性があるのではないかと疑わしい)、なぜ非推奨なのですか?
これはむしろ、あなたの質問の前提の否定に対する答えであり、それが何であるかを確認するためでもあります.
この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
そのため、可能な限り使用することをお勧めしますが、制限があります。「ループを使わずに配列内のカウントでグループ化する方法」でも答えたように、
Array
Hash
String
each_with_object
初期要素が などの不変オブジェクトのNumeric
場合、次を使用する必要がありますinject
。
sum = (1..10).inject(0) {|sum, n| sum + n} # => 55
Ruby トランクのソース コードには注記がありません。メソッドはまだそこにあり (そのページの主張に反して)、私が見つけたメーリング リストではそれについての話はありませんでした。
APIdock は単純に混乱しています。APIdock が非推奨になったと言っているポイントは、実際には (単に ActiveSupport バックポート拡張機能というよりも) 標準ライブラリのメソッドを含む最も初期のバージョンであり、メソッドを持つ Ruby を使用している場合、Rails はそのバージョンを無効にします。プロジェクト間で移行する方法に混乱しているようです。
うーん、それは少し奇妙に思えます。
Agile Rails でさえどこかに書いています:
「Ruby 1.9 の
each_with_object
メソッドは非常に便利であることがわかったため、Rails のクルーが Ruby 1.8 にバックポートしました」.
これは APIdock のエラーのようですか? それがなぜなのか、私には理由がわかりません。