Ritorna nil dopo il ciclo e anche nel blocco a meno che in Ruby

Aug 18 2020

Ho un codice funzionante come di seguito. C'è un modo migliore per tornare nildopo il eachciclo e unless elsenell'esempio seguente?

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

Dovrei passare nilin ogni caso perché ci sono condizioni diverse in altri metodi in cui viene chiamato questo metodo. Questo è il motivo per cui ho scritto il codice come sopra.

Risposte

5 D.SM Aug 18 2020 at 03:05

Ruby ha un detectmetodo, quindi il tuo intero metodo può essere sostituito con

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

Per inciso, eachfunziona bene per gli array vuoti, quindi il empty?controllo che hai è completamente inutile anche se mantieni il ciclo esplicito.