Techioz Blog

nil または empty を表す慣用的な Ruby フィルター?

概要

配列の nil または空の要素をフィルタリングして除外する、より慣用的な方法を探しています。

次の形式のメソッドがたくさんあります。

def joined
    [some_method, some_other_method].compact.reject(&:empty?).join(' - ')
end

これは some_method と some_other_method の結果を受け取り、非 nil (compact は本質的に拒否(&:nil?) と同等) かつ空ではないものだけを返します。

Array または Enumerable に、同じ結果を一発で取得できるものはありますか?

解決策

Rails では、reject(&:blank?)、または同等の select(&:present?) を実行できます。

これが Rails アプリ用ではなく、これを頻繁に行う場合は、String またはフィルタリングしているその他のものに対して独自のヘルパーを定義することをお勧めします。

class String
  alias :blank? :empty?
end

class NilClass
  def blank?
    true
  end
end