Пламен обнови решението на 26.10.2011 19:57 (преди около 14 години)
Добавил съм едни подсказки в условието на задачата. Погледни ги и виж какви идеи ще ти дадат за промяна на кода.
tags_filter е доста странен метод. Може би song.matches_tags? е по-добре.
Благодаря! Имаше голяма полза от подсказките, не че съм успял да се справя перфектно... :)
- Конструктора ти на
Songе забавен, но вместо да правишinstance_variable_set, по-добре да минаваш сsend "#{attribute}=", value. Трябва да ползвашattr_accessor. Браво, че си се сетил. - Вместо
songs_string.each_line.mapтрябваше да напишешsongs_string.lines.map. По-добре се чете. - В
matches_tags?трябваше да напишешwanted.all? {} and unwanted.none? {}. Това с болевата логика е иreturn-а вif-а е много неинтуитивно. - Хубаво си съкратил
matches?, но не ми харесва как прави винаги тези проверки. По-добре е да не сравняваш име, ако не ти е подадено:name.
Иначе, хубаво, кратко и елеганто. Браво. Давам ти две бонус точки. Третата не ти я давам заради if all?; return none?; end; false сегмента.
Това с if all?; return none?; end; false го направих, защото ми се струваше, че иначе редът става много дълъг. Първоначално беше така, както трябваше да се напише :)
А за да не се проверява за име, когато нямаме зададено :name това :name => criteria[:name] && @name == criteria[:name] удачно ли е?
