Возвращает nil после цикла, а также в блоке if в Ruby

Aug 18 2020

У меня есть рабочий код, как показано ниже. Есть ли лучший способ вернуться nilпосле eachцикла и unless elseв приведенном ниже примере?

def find_member(member_name)
  unless members.empty?
    members.each do |member|
      if member.name == member_name
        return member
      end
    end
    nil
  else
    nil
  end
end

Я должен пройти nilв каждом случае, потому что в других методах, где вызывается этот метод, существуют разные условия. Вот почему я написал код, как указано выше.

Ответы

5 D.SM Aug 18 2020 at 03:05

У Ruby есть detectметод, поэтому весь ваш метод можно заменить на

members.detect { |member| member.name == member_name }

Кроме того, eachотлично работает для пустых массивов, поэтому в empty?вашей проверке нет необходимости, даже если вы сохраняете явный цикл.