rubyのreduceと同じことを注入するのですか?


114

ここで一緒に文書化さているのがわかりまし。それらは同じものですか?Rubyに多くのエイリアス(配列のmap / collectなど)があるのはなぜですか?どうもありがとう。

回答:


160

はい、fold他の多くのプログラミング言語や数学でも呼ばれています。Rubyは、さまざまなバックグラウンドを持つプログラマーが直感的に使用できるように、多くのエイリアスを作成します。で使用#lengthしたい場合は、使用Arrayできます。を使用したい場合は#size、それでも問題ありません。


4
独自のエイリアスを作成したい場合は、alias_methodに興味があるかもしれません。
Nick McCurdy 2013年

23
#lengthと#countはRubyでは同等ではありません。#lengthと#sizeがあります。
Quolonelの質問2014

9
3.lengthはNoMethodErrorを与えます。3.sizeは4を返します。明らかに3は配列ではありませんが、ダックタイピングには注意してください。(3_000_000_000_000_000.sizeは8を返し、3_000_000_000_000_000_000_000_000_000_000_000_000_000_000.sizeは20を返します。使用するメモリの量のようです。)
ChrisPhoenix

18
ええと、私は現在のRubyドキュメントruby-doc.org/core-2.2.3/Enumerable.html#method-i-reduceinject、ユーザーが2つを読む必要がないように同じことを言っているだけの場合に優れていると思います説明し、それらが同じであるかどうかを調べてみてください...これはDRYの原則とは一致しませんか?
非極性

3
@太極者無極而生、良い点、私はあなたが予測したようにこれに混乱しました
neontapir

6

ドキュメントのより最近のバージョンはEnumerable#reduceそれを明示的に指定します:

injectそしてreduce方法はエイリアスです。どちらにもパフォーマンス上の利点はありません。


1
明らかにセマンティクスのために、それがどのように使用されるかに基づいてそれらを分離するのが好きです。proc(&:+)の場合、reduce、それがブロックの場合、inject
TheRealMrCrowley
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.