Iniettare è la stessa cosa di ridurre il rubino?


114

Ho visto che sono stati documentati insieme qui . Sono la stessa cosa? Perché Ruby ha così tanti alias (come map / collect per array)? Molte grazie.

Risposte:


160

Sì, ed è anche chiamato foldin molti altri linguaggi di programmazione e in Matematica. Ruby si alias molto per essere intuitivo per i programmatori con background diversi. Se vuoi usare #lengthsu un Array, puoi. Se vuoi usare #size, va bene anche questo!


4
Se vuoi creare i tuoi alias, potresti essere interessato a alias_method .
Nick McCurdy

23
#length e #count non sono equivalenti in Ruby. #length e #size sono.
Domande Quolonel

9
3.length restituisce NoMethodError; 3.size restituisce 4. Ovviamente 3 non è un array, ma attenzione alla digitazione a papera! (3_000_000_000_000_000.size restituisce 8 e 3_000_000_000_000_000_000_000_000_000_000_000_000_000_000.size restituisce 20; sembra essere la quantità di memoria che occupa.)
ChrisPhoenix

18
hm, penso che l'attuale documentazione di Ruby ruby-doc.org/core-2.2.3/Enumerable.html#method-i-reduce potrebbe essere migliore se dicesse la stessa cosa in injectmodo che gli utenti non debbano leggere i due descrizione e cerca di capire se sono la stessa cosa ... non è d'accordo con il principio DRY?
nonopolarità

3
@ 太極 者 無極 而 生, buon punto, ero confuso da questo proprio come avevi previsto
neontapir

6

Versioni più recenti della documentazione di lo Enumerable#reducespecificano esplicitamente:

I metodi injecte reducesono alias. Non ci sono vantaggi in termini di prestazioni per nessuno dei due.


1
mi piace separarli in base a come vengono usati, ovviamente solo per la semantica. se è un proc ( &:+), riduci, se è un blocco, inietta
TheRealMrCrowley
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.