📖

Scalaのimplicit parameterを把握する

2022/02/22に公開

Scalaで出てくるimplicit parameterについてなんとなく把握しているようで把握していなかったので、自分でコードを書いて確かめてみました。

object Main extends App{
  implicit val qwert: String = "Hello"

  def printString(implicit xxx: String): Unit = {
    println(xxx)
  }

  printString
  printString("world")
}

実行結果は以下の通り。

Hello
world

引数を取らない場合にはimplicit valで指定したHelloが表示されることがわかります。

もう少し複雑なことをすると以下のようなこともできます。

object Main extends App{
  implicit val qwert: String = "Hello"
  implicit val asdfg: Int = 123
  implicit val zxcvb: Double = 1.234
  
  def printString(s: String)(implicit xxx: String): Unit = {
    println(xxx + ", " + s + "!")
  }

  def printInt(i: Int)(implicit yyy: Int): Unit = {
    println(i + yyy)
  }

  def printDouble(d: Double)(implicit zzz: Double): Unit = {
    println(d + zzz)
  }

  printString("world")
  printString("WORLD")("HELLO")
  printInt(321)
  printInt(321)(654)
  printDouble(4.321)
  printDouble(4.321)(8.765)
}

実行結果は以下の通り。

Hello, world!
HELLO, WORLD!
444
975
5.555
13.086

表現が正しいかわからないが、implicit parameterで指定した型をふまえ暗示的に引数を渡してくれるようであります。複数のメソッドが同じ引数をとる場合に"いい感じ"に処理してくれそうです。

Discussion