【一人 bugs.ruby Advent Calendar 2020】[Feature #17043] Invokable module for custom Proc-like objects【2日目】
一人 bugs.ruby Advent Calendar 2020 2日目の記事になります。
今回は Proc
オブジェクトの共通のモジュールを定義しよう、という提案のチケットです。
[Feature #17043] Invokable module for custom Proc-like objects
このチケットは『Proc
なオブジェクト』を明示化できる Invokable
というモジュールを追加する提案になります。
このモジュールを include
することで暗黙的に #to_proc
#curry
#<<
#>>
などが定義される、という挙動になります。
class String # 暗黙的に to_proc や curry などが定義される include Invokable # Invokable を include したクラスで #call を定義しておきこれが呼び出される def call(...) to_sym.to_proc.call(...) end end pp "size".call [1, 2, 3] # => 3 pp ["a", "bb", "ccc"].map(&"size") # => [1, 2, 3] pp [1, 12, 123].map(&"to_s" >> "length") # => [1, 2, 3]
これはいま同様のことを行う gem が存在しているのでそれを利用すると上記と同じようなコードを記述する事ができます。
これ自体は便利そうではあるんですが、実際に『Proc
オブジェクトっぽいもの』を定義することってそんなにないのでそこまで(標準ライブラリにいれてまで)実用的ではない気がしますねえ。
ただ、例えば case
とかで『任意のオブジェクトが Proc
っぽいオブジェクトかどうか』を判定する手段として Invokable
があると実用的かなー、という感じはしますねー。
現時点だとチケットの議論は止まっているので欲しい方がいればコメントしてみるといいと思います。