class Object
define_method :'|>' do |*args|
send *args
end
define_method :'<|' do |arg1, *args|
arg1.send self, *args
end
end
# 本当は 'abc' |> upcase と書きたい
p 'abc'.method('|>').call :upcase # => "ABC"
p :downcase.method('<|').call 'XYZ' # => "xyz"
Ruby は演算子の新規作成が無理なんで、こんなまどろっこしい方法で呼び出している。確か Jekyll の Liquid ってシステムでパイプを使ったリダイレクト?を実現していた記憶があるが、まり使い勝手が良いとはいえなかった。それに Liquid のやり方を Object で実装すると、SOLID の O と L であるオープン・クローズドの原則とリスコフの置換原則を破るので、あんまり行儀の良い方法ではないとは思うしね。
えー、そんなことはともかくそれで、次期 Ruby には搭載されてもいいと思うのですが、コア開発の皆様、2.6 で関数合成を導入したのだから、ここはひとつ、2.7 では |>, <| があると、クリスマスが楽しみになるんで、よろしくおねがいいたします。
かしこ