Кирил обнови решението на 14.10.2012 16:19 (преди около 12 години)
-
self.
се изпуска максимално много; в случая на теб не ти е необходим никъде и можеш да го изпуснеш навсякъде - Проверката за
kind_of?
е ненужна въвfizzbuzz
, понеже условието не го изисква; а и е малко излишно да го правиш на всяка итерация, би могъл да проверишbegin
/end
преди началото наmap
-а - А, и
map
се ползва по-често като име, отколкотоcollect
- Хешът, който връщаш в
group_values
има страничен ефект — дифолтна стойност; може би не искаш да става така :)
- Не съм сигурен с какво мога да заменя
self
. Там ще трябва да почета повече, тъй като и на мен не ми хареса. - Проверката
kind_of?
я използвам, тъй като ако следn = :fizz if n % 3 == 0
,n
стане символ на следващите две няма оператор%
за него и гърми. Много кофти идея ли е да го използвам така? - Относно
map
- мерси, не знаех. - Дифолтната стойност я използвам, за да мога свободно да си ползвам операторът
+
, защото иначе не мога да събераnil
сArray
. Работата е там, че все още не осъзнавам какъв ми е страничният ефект...
Да, кофти идея е да го ползваш така, понеже създаваш темпорална кохезия между двата реда код - ако ги разменя, има друг ефект. Друго което е кофти, е да не го правиш с elsif
или с case
. И двете правят кода по-труден за разбиране. Въобще, fizzbuzz-а ти е под критика.
Мда, съгласен съм. Направих го така за да ме одобри skeptic
за броя редове в метод(5).
Първоначалната имплементация беше:
if n % 5 == 0 and n % 3 == 0
:fizzbuzz
elsif n % 3 == 0
:fizz
elsif n % 5 == 0
:buzz
else
n
Ей сега ме изби на простотия с case
, след като ми позволи да си ползвам моя метод:
case n.prime_divisors.join
when /35/ then :fizzbuzz
when /3/ then :fizz
when /5/ then :buzz
else n
end
... но и това е 6 реда. Едва след това прочетох повече за case
в ruby и ей сега качвам адекватно решение.