読者です 読者をやめる 読者になる 読者になる

( ꒪⌓꒪) ゆるよろ日記

( ゚∀゚)o彡°オパーイ!オパーイ! ( ;゚皿゚)ノシΣ フィンギィィーーッ!!!

self.send(pred)がtrueならばselfを、そうでないならnilを返すメソッド

ruby

何をいっているのかというと、こういうことです


class Object
  def filter(&pred)
    (yield self) ? self : nil
  end
end

書いてみた。

foo".filter(&:present?) # => "foo"
"".filter(&:present?)   # =>  nil


ようは、 str.present? ? str : other みたいなやつを書きやすくするためのものです

str = "hoge" 
str.filter(&:present?) || "fuga" # => "hoge"

str = "" 
str.filter(&:present?) || "fuga" # => "fuga"

よい名前が思い浮かばなかった(´・ω・`)

8/29追記

ActiveSupportにObject#presenceというのがあるそうだ。present?だけならこれで充分。自分は、任意のlambdaを渡したい場合があるのでこれも無駄にはならない、はず。


8/29さらに追記

というか、ずいぶん前に自分で既に書いてgemにしてあったし俺は一体何をやっているんだ……。
おそらく上位存在からの記憶操作が行われた可能性がある……!!

yuroyoro/lambda_driver · GitHub