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.

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!


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.