数日前の記事と、対になる(?)もの
https://t.co/G0bgugC4j6
— Kenji Yoshida (@xuwei_k) 2021年3月12日
現状のScala 3、この機能なくなってるっぽいのだけど、地味に不便だなぁ
たとえば、slickみたいなORマッパーや、各種Jsonライブラリなど、case classをなにか他のデータにマッピングするとき、これらが役に立つわけです。たとえばslickでは公式的にも大量にFunctionNのtupledが使われていますね
これがScala 3ではそのままでは出来なくなります。
いや、たんに
<>(User.tupled,
は
<>((User.apply _).tupled,
にすればScala 2でも3でも通るはず?なので、多少冗長になるけれど、あまり複雑なこと(マクロなど)をしたくないひとは、そうやって書けばいいと思います。
しかし、上記のように書きかえるの若干気に食わないし、実行時にもScala 2の場合、一瞬余計なオブジェクト挟むことになる?ので、出来ればScala 2でも3でもtupledそのまま呼べるようにしたいですよね?
というわけで transparent inline
で作りました。
Scala 3のmacroまだよくわかっていないので、もっと良い書き方あったら教えて下さい。