Renvoie nil après la boucle et également dans le bloc à moins que Ruby

Aug 18 2020

J'ai un code de travail comme ci-dessous. Existe-t-il un meilleur moyen de revenir nilaprès la eachboucle et unless elsedans l'exemple ci-dessous ?

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

Je devrais passer nildans chaque cas car il existe différentes conditions dans d'autres méthodes où cette méthode est appelée. C'est la raison pour laquelle j'ai écrit le code comme ci-dessus.

Réponses

5 D.SM Aug 18 2020 at 03:05

Ruby a une detectméthode, donc toute votre méthode peut être remplacée par

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

En passant, eachfonctionne bien pour les tableaux vides, donc la empty?vérification que vous avez est complètement inutile même si vous gardez la boucle explicite.