Help us understand the problem. What is going on with this article?

Scalaのimplicitlyの使い方

概要

以前にScalaのimplicit(暗黙)に関する理解のためのメモでimplicitの使い方について、まとめました。今回は「implicitly」について取り上げます。

implicitlyについて

implicitlyについてはあまり情報がないのですが、stackoverflowのWhat is the Scala identifier “implicitly”?が分かりやすいかなと思います。
要するに暗黙の変数として定義されたものを、型で指定して取得する関数になります。とはいっても、これだけだと何が嬉しいかよくわからないと思うので、下記に例題を用意しました。

例題

下記のように親子関係となっているオブジェクトクラスがあります。ImplicityTestから親クラスにある暗黙の変数(test)の値を取得するためには、どうしたら良いでしょうか。

object ImplicityTest extends ParentImplicityTest{}

abstract class ParentImplicityTest {
  implicit val test:String = "implicitTest"
}

取得方法

① 変数名をそのまま使う

変数名が分かっていればそのまま取得すれば良いのですが、ソースを追って変数名を調べなければいけません。

println(test)

② 暗黙の引数を使う

関数で暗黙の引数をString型にすれば、取得可能です。ただ、変数として使いたいだけの場合は、わざわざ関数を作らなければいけないのかと少し感じるかもしれません。

def printlnImplicity(implicit param:String):Unit = {
  println(param)
}

③ implicitlyを使う

最後にimplicitlyを使う方法です。implicitlyは型さえ指定すれば、暗黙の変数を変数として取得できます。

println(implicitly[String])
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away