Devuelve nil después del ciclo y también en bloque a menos que en Ruby

Aug 18 2020

Tengo un código de trabajo como el siguiente. ¿Hay alguna forma mejor de volver nildespués del eachciclo y unless elseen el siguiente ejemplo?

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

Debería pasar nilen cada caso porque hay diferentes condiciones en otros métodos donde se llama a este método. Esa es la razón por la que he escrito el código como se indica arriba.

Respuestas

5 D.SM Aug 18 2020 at 03:05

Ruby tiene un detectmétodo, por lo que todo su método se puede reemplazar con

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

Aparte, eachfunciona bien para matrices vacías, por lo tanto, la empty?verificación que tiene es completamente innecesaria incluso si mantiene el bucle explícito.