คืนค่า nil หลังจากวนซ้ำและในเว้นแต่บล็อกใน 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?ตรวจสอบที่คุณมีจึงไม่จำเป็นอย่างยิ่งแม้ว่าคุณจะยังคงวนซ้ำอย่างชัดเจนก็ตาม