Ist Spritzen dasselbe wie Rubin reduzieren?

114

Ich habe gesehen, dass sie hier zusammen dokumentiert wurden . Sind sie dasselbe? Warum hat Ruby so viele Aliase (wie Map / Collect für Arrays)? Vielen Dank.

Jacky
quelle

Antworten:

160

Ja, und es wird auch foldin vielen anderen Programmiersprachen und in Mathematik aufgerufen . Ruby aliasiert viel, um für Programmierer mit unterschiedlichem Hintergrund intuitiv zu sein. Wenn Sie #lengthauf einem verwenden möchten Array, können Sie. Wenn Sie verwenden möchten, #sizeist das auch in Ordnung!

Zach
quelle
4
Wenn Sie Ihre eigenen Aliase erstellen möchten, könnte Sie alias_method interessieren .
Nick McCurdy
23
#length und #count sind in Ruby nicht gleichwertig. #Länge und #Größe sind.
Quolonel Fragen
9
3. Länge gibt NoMethodError; 3.size gibt zurück 4. Offensichtlich ist 3 kein Array, aber Vorsicht vor der Eingabe von Enten! (3_000_000_000_000_000.size gibt 8 zurück und 3_000_000_000_000_000_000_000_000_000_000_000_000_000_000.size gibt 20 zurück; es scheint die Menge an Speicher zu sein, die es
beansprucht
18
hm, ich denke, die aktuellen Ruby-Dokumente ruby-doc.org/core-2.2.3/Enumerable.html#method-i-reduce sind möglicherweise besser, wenn sie nur dasselbe sagen, injectdamit Benutzer die beiden nicht lesen müssen Beschreibung und versuchen herauszufinden, ob sie gleich sind ... passt das nicht zum DRY-Prinzip?
Unpolarität
3
@ 太極 者 無極 而 生, guter Punkt, ich war verwirrt, als Sie voraussagten
Neontapir
6

Neuere Versionen der Dokumentation Enumerable#reducegeben es explizit an:

Die injectund reduceMethoden sind Aliase. Es gibt auch keinen Leistungsvorteil.

Axiac
quelle
1
Ich mag es, sie nach ihrer Verwendung zu trennen, offensichtlich nur für die Semantik. Wenn es ein proc ( &:+) ist, reduzieren Sie, wenn es ein Block ist, injizieren Sie
TheRealMrCrowley