#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
Как бы я это сделал? Прямо сейчас он создает нулевые значения, когда пользователь мужского пола, а затем операция <==> завершается с ошибкой.
@user.max_by{|user_id, user| user.height if user.female?}
Ответ №1:
Вы можете объединить их в цепочку, поэтому сделайте свой выбор перед агрегированием
@user.select{|user| user.female?}.max_by{|user_id, user| user.height}
Кроме того, вы должны быть в состоянии упростить (просто немного синтаксического сахара):
@user.select(amp;:female?).max_by(amp;:height)
Комментарии:
1. круто, как называется процесс, который вы используете во втором примере? Я хочу узнать об этом больше. Спасибо!
2. Во втором примере используется символ#to_proc . Обратите внимание, что это будет немного медленнее , чем стандартные блоки в некоторых версиях Ruby.
3. @Грег Кэмпбелл — отличный пост … любой, кто читает это, должен прочитать эту ссылку. заголовок для меня: оба ruby 1.8.7 и 1.9.2 подходят для использования вышеуказанного синтаксиса. Если вы используете другое, проверьте ссылку.