Powiedzmy mam tablicę długościach czas wyrażony w minutach:Dowolna standardowa metoda podobna do dotknięcia, ale zwrócenie wyniku bloku zamiast własnego?
minutes = [20, 30, 80]
chciałbym podsumować zawartość tablicy i wyjście wynik w formacie <hours>:<minutes>
. Dla powyższego przykładu oczekuję, że wynik będzie 02:10
.
Czy istnieje standardowa metoda Ruby (tj. Zawarta w core lub std-lib) umożliwiająca wykonanie tej operacji w łańcuchu metod o jednej linii? (tj. bez użycia zmiennej do przechowywania wyniku pośredniego). Mam na myśli coś takiego:
puts minutes.reduce(:+).foomethod { |e| sprintf('%02d:%02d', e/60, e % 60) }
Co foomethod być? Object.tap jest dość zbliżony do tego, czego potrzebuję, ale niestety zwraca self zamiast wyniku bloku.
patrz http://stackoverflow.com/a/7879071/2981429 dla łatwego sposobu zdefiniowania takiej metody; możesz również uczynić element tablicą jednoelementową i użyć 'map'. –
To odpowiada na moje pytanie: nie ma metody robienia tego w standardowej Ruby, musisz zdefiniować własną. –
BTW smutny. Za pomocą innej metody klasy obiektu, podobnej do dotknięcia, bue zwraca wynik, wiele kodów będzie czystszych, a wiele łańcuchów może być dłuższych bez pośredniej zmiennej czasowej. – jgomo3