Решение на Втора задача от Александър Александров
Към профила на Александър Александров
Резултати
- 6 точки от тестове
- 0 бонус точки
- 6 точки общо
- 24 успешни тест(а)
- 0 неуспешни тест(а)
Код
Лог от изпълнението
........................ Finished in 0.02207 seconds 24 examples, 0 failures
История (4 версии и 3 коментара)
Александър обнови решението на 23.10.2014 01:51 (преди около 10 години)
Извинявам се за няколкото варианта, просто трябваше да оправя форматирането.
Александър обнови решението на 23.10.2014 01:56 (преди около 10 години)
Здрасти.
Имам няколко коментара към решението ти:
- На места кодът ти не е идентиран правилно.
- Не оставяй празен ред преди първия метод в клас. Същото важи за include-а на
Enumerable
. - Слагай скоби около параметрите при дефиниране метод, когато има такива.
- Защо ти е reader-а за
data_filter
? Според мен не ти трябва. -
Filter#&
,TypeFilter#&
иSignFilter#&
адски много си приличат. Според мен ти трябва точно един от тях. Сещаш ли се как можеш да го постигнеш? Същото за|
. - Защо си кръщаваш параметрите
big_filter
? Не намирам никаква логика в това име. Когато става въпрос за параметри на бинарен оператор (каквито са&
и|
) има конвенция. Погледни style guide-а. - Провери как работи
Array#each
, когато не му подадеш блок. ОчаквамеNumberSet#each
да работи по същия начин.
Помисли как можеш да разпишеш тази конструкция, така че да нямаш нужда от return
:
return true if (@sign == :negative && number < 0)
return true if (@sign == :positive && number > 0)
return true if (@sign == :non_negative && number >= 0)
true if (@sign == :non_positive && number <= 0)
Тук не знам, защо си решил да префикснеш името на резултата с @@
. Това прави променливата ти клас променлива. Не сме говорили за тях, не са ти необходими тук.
@@to_return = NumberSet.new
@@to_return = @array.select{ |number| big_filter.filter(number) }
@@to_return
Също така първия ред не е необходим, защото втория ред зачиства постигнатото от първия. Тоест, от гледна точка на резултата от извикване на метода, тези три реда са еквивалентни на това:
def [](big_filter)
@array.select{ |number| big_filter.filter(number) }
end
Тук трябва да коригираш малко поведението на метода. Ние очакваме NumberSet#[]
да връща NumberSet
обект, а ти връщаш Array
обект.
Успех! :)
Мерси за изчерпателният отговор и насоки. При свободно време ще оправя кода. Относно Filter#&
, TypeFilter#&
и SignFilter#&
, мисля че ако направя Filter
родител на останалите два класа няма да има нужда от копиране на кода за &
.