Екатерина обнови решението на 21.10.2014 21:11 (преди около 10 години)
Здрасти,
Няколко забележки по иначе добрия ти код:
- Гледай да не monkey patch-ваш класове, особено ако са толкова common колкото
Array
.contains?(array, number)
в рамките на твоя клас би бил по-добър вариант от колкото да промениш всичкиArray
обекти във Вселената. Необходим ли ти е този метод изобщо и в каква ситуация? -
size == 0 ? true : false
можеш да го запишеш още катоsize == 0 ? true ? true ? true : false : false : false
или пък по-простотоsize == 0
:) Все пак==
връща булева стойност. P.S.Array
има методempty?
, така че можеш да върнеш направо@set.empty?
. Според мен ще е по-просто.
Има две неща, които не ми харесват във филтрите ти:
- Пазиш анонимна функция в класа, с която ще извършваш оценката и имаш метод, който я показва на външния свят. Визирам
Filter#filter_by
. Какво мислиш за варианта да скриеш начина, по който става тази оценка (да скриеш ламбдата) и да имаш метод, който приема число и връщаtrue
/false
в зависимост от това дали удовлетворява филтъра? - Второто нещо, което не ми харесва е начина, по който се присвояват анонимните функции в класовете
TypeFilter
иSignFilter
. Полето@filter_by
ми се струва малко магическо гледайки само тези два класа. Чудя се дали би бил по-добър варианта да викашsuper
с блок. Можеш да пробваш :)
Малко храна за размисъл. Готино решение иначе, продължавай така!