Czy wstrzyknąć to samo, co zredukować rubin?

114

Widziałem, że zostały tutaj razem udokumentowane . Czy są tym samym? Dlaczego Ruby ma tak wiele aliasów (takich jak map / collect dla tablic)? Wielkie dzięki.

Jacky
źródło

Odpowiedzi:

160

Tak, i jest również wywoływany foldw wielu innych językach programowania i matematyce. Ruby używa aliasów, aby być intuicyjnym dla programistów z różnymi doświadczeniami. Jeśli chcesz użyć #lengthna Array, możesz. Jeśli chcesz użyć #size, to też jest w porządku!

Zach
źródło
4
Jeśli chcesz tworzyć własne aliasy, możesz być zainteresowany alias_method .
Nick McCurdy,
23
#length i #count nie są równoważne w Rubim. #długość i #rozmiar to.
Pytania dotyczące Quolonel
9
3.length daje NoMethodError; 3.size zwraca 4. Oczywiście 3 nie jest tablicą, ale uważaj na kaczkę! (3_000_000_000_000_000.size zwraca 8 i 3_000_000_000_000_000_000_000_000_000_000_000_000_000_000.size zwraca 20; wydaje się, że jest to ilość
zajmowanej
18
hm, myślę, że obecna dokumentacja Ruby ruby-doc.org/core-2.2.3/Enumerable.html#method-i-reduce może być lepsza, jeśli mówi to samo co inject, aby użytkownicy nie musieli czytać dwóch opis i spróbuj dowiedzieć się, czy są takie same ... czy nie jest to zgodne z zasadą DRY?
biegunowości
3
@太極者無極而生, dobry punkt, byłem zdezorientowany to tak jak prediced
neontapir
6

Nowsze wersje dokumentacji Enumerable#reduceokreślają to wyraźnie:

injectI reducemetody są aliasy. Nie ma też żadnej korzyści z wydajności.

axiac
źródło
1
Lubię je rozdzielać na podstawie tego, jak są używane, oczywiście tylko dla semantyki. jeśli jego proc ( &:+), zmniejszyć, czy jest to blok, inject
TheRealMrCrowley