Чи вводити те саме, що зменшити в рубіні?


114

Я бачив , що вони були зареєстровані разом тут . Вони однакові? Чому у Ruby так багато псевдонімів (наприклад, карта / збирання для масивів)? Дуже дякую.

Відповіді:


160

Так, його також називають foldу багатьох інших мовах програмування та з математики. Багато псуйте псевдоніми, щоб бути інтуїтивно зрозумілим для програмістів з різним походженням. Якщо ви хочете використовувати #lengthна Array, ви можете. Якщо ви хочете використовувати #size, це теж добре!


4
Якщо ви хочете створити власні псевдоніми, вас може зацікавити alias_method .
Нік МакКерді,

23
#length і #count не еквівалентні в Ruby. #length і #size є.
питання Quolonel

9
3.length дає NoMethodError; 3.размер повернення 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.000.розмір повертає 20; здається, це обсяг пам'яті, який він займає.)
ChrisPhoenix

18
хм, я думаю, що поточні документи Ruby ruby-doc.org/core-2.2.3/Enumerable.html#method-i-reduce можуть бути кращими, якби це було так само, як і injectтак, що користувачі не повинні читати два опишіть і спробуйте розібратися, чи вони однакові ... чи не йде це за принципом DRY?
неополярність

3
@ 太極 者 無極 而 生, хороший момент, мене це збентежило саме так, як ви прогнозували
neontapir

6

Більш новіші версії документації Enumerable#reduceвказують це явно:

injectІ reduceметоди є псевдонімами. Немає жодної вигоди від продуктивності.


1
Мені подобається відокремлювати їх на основі того, як вони використовуються, очевидно, лише для семантики. якщо його proc ( &:+), зменшіть, якщо це блок,
введіть
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.