Екатерина обнови решението на 21.10.2014 21:11 (преди около 11 години)
Здрасти,
Няколко забележки по иначе добрия ти код:
- Гледай да не 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с блок. Можеш да пробваш :) 
Малко храна за размисъл. Готино решение иначе, продължавай така!
