Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

instance_execとprocを使って、微妙に似ているメソッドチェインを簡略化して書く

今回のネタは完全に趣味の領域なので…おそらく実用性皆無です。

instance_execとprocを使って、微妙に似ているメソッドチェインを簡略化して書く事ができます。

たとえば…次のような実用性ゼロの似たメソッドチェインがあるとします。

"s".upcase.next.downcase

"s".next.upcase.next.next

こんなだと、例えば

ary = ["s", "s".next].each do |s|
  s.upcase.next
end
ary[0].downcase
ary[1].next

みたいにやるかも知れません。

ここで、以下のようなProcオブジェクトを用意し…

test = -> { upcase.next}
#=> #<Proc:0x007fd5e913f878@(pry):40 (lambda)>

基礎の部分に適用してみます。

"s".instance_exec &test
=> "T"

返ってきたのは文字列。そう、このままメソッドチェインが続行できます。やったぜ

 "s".instance_exec(&test).downcase
#=> "t"

 "s".next.instance_exec(&test).next
#=> "V"