8
2

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.

scala 2.13で導入される予定のtap/pipeを2.12で使う方法

Last updated at Posted at 2018-08-21

きっかけ

僕がscalaを書くたびにコピペしてるutilツールの一つにtap関数があります。
ScalaでRubyのObject#tapがぽぽぽぽ〜ん。っていうかいつでもmapしたい - ( ꒪⌓꒪) ゆるよろ日記
たぶんもう10回以上コピペしていて、いい加減ライブラリ化したいと思っていたところ次のツイートが流れてきました。

2.13でtap関数が標準ライブラリで正式採用、めでたい!

でも僕明日からでもこの標準のシグネチャで使いたいんだよなあ。
しかも2.13はRC1の締め切りが2018/9月末になってる。うーん。

というわけで、scala 2.12用に2.13で導入されるtap/pipeと全く同じものをライブラリで用意しました。
いわゆるバックポートというやつです。

使い方

build.sbtに以下を追加

libraryDependencies += "com.github.bigwheel" %% "tapandpipe" % "1.0"

tap/pipeを使いたいところで以下をimport

import com.github.bigwheel.util.chaining._

tap/pipeを使う

object Main {

  def main(args: Array[String]): Unit = {
    val a = 1
    a.tap(println)

    println(a.pipe(_ + 1))
  }

}

蛇足

5年以上なんとかしたいと思っていた問題がやっと片付きました。標準準拠の実装として2.12でも使えるようになりましたしすっきりです。

8
2
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
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?