Scala 2.10に切り替えた後、たくさんの警告が表示されます。
構造型メンバーメソッドのリフレクティブアクセス...暗黙の値language.reflectiveCallsを表示することで有効にする必要があります
どういう意味ですか?
Scala 2.10に切り替えた後、たくさんの警告が表示されます。
構造型メンバーメソッドのリフレクティブアクセス...暗黙の値language.reflectiveCallsを表示することで有効にする必要があります
どういう意味ですか?
警告は、実際には、説明のためにドキュメントのどこを見ればよいかを示しています。
Test.scala:9: warning: reflective access of structural type member method y should be enabled
by making the implicit value language.reflectiveCalls visible.
This can be achieved by adding the import clause 'import scala.language.reflectiveCalls'
or by setting the compiler option -language:reflectiveCalls.
See the Scala docs for value scala.language.reflectiveCalls for a discussion
why the feature should be explicitly enabled.
参照されたScaladocエントリ(ドキュメントエントリを展開するには、必ず左側の|>矢印をクリックしてください)。
Scala Docsから:
なぜそれを制御するのですか?リフレクションは、すべてのプラットフォームで利用できるわけではありません。ProGuardなどの一般的なツールでは、処理に問題があります。リフレクションが利用可能な場合でも、リフレクティブディスパッチは驚くべきパフォーマンスの低下につながる可能性があります。
匿名のサブクラスを使用するこのコードについて考えてみてください。
class Student(val id:Int)
val specialStudent = new Student(0) {
val greeting = "I am a special student with id " + id // Warning: id can be obfuscated
}
Option[Double or Long]
を100で割るのに使用していた関数でこの警告に遭遇しました。
def safeDivideBy100[T <: AnyVal { def toDouble: Double }](number: Option[T]): Option[Double] =
number match {
case None => None
case Some(x) => Some(x.toDouble / 100)
}
それを修正するには、ファイルの先頭に追加するだけです。
import scala.language.reflectiveCalls