Kembalikan nil demi loop dan juga di blok kecuali di Ruby

Aug 18 2020

Saya memiliki kode yang berfungsi seperti di bawah ini. Apakah ada cara yang lebih baik untuk kembali nilsetelah eachloop dan unless elsepada contoh di bawah ini?

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

Saya harus lulus nildalam setiap kasus karena ada kondisi berbeda dalam metode lain di mana metode ini dipanggil. Itulah alasan mengapa saya menulis kode seperti di atas.

Jawaban

5 D.SM Aug 18 2020 at 03:05

Ruby memiliki sebuah detectmetode, jadi seluruh metode Anda dapat diganti dengan

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

Selain itu, eachberfungsi dengan baik untuk array kosong, oleh karena itu empty?pemeriksaan yang Anda miliki sama sekali tidak diperlukan bahkan jika Anda menyimpan loop eksplisit.