Rubyでブロックされていない限り、ループの後にnilを返します。

Aug 18 2020

私は以下のように動作するコードを持っています。ループのnil後、以下の例で戻るためのより良い方法はありますか?eachunless 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?正常に機能するため、明示的なループを維持している場合でも、チェックは完全に不要です。