📖
Scalaのimplicit parameterを把握する
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