1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ruby にも関数言語ではやりの |> と <| がほしいよ!

Last updated at Posted at 2019-02-11
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 では |>, <| があると、クリスマスが楽しみになるんで、よろしくおねがいいたします。

かしこ

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?