17

Scala 2.10に切り替えた後、たくさんの警告が表示されます。

構造型メンバーメソッドのリフレクティブアクセス...暗黙の値language.reflectiveCallsを表示することで有効にする必要があります

どういう意味ですか?

4

3 に答える 3

17

警告は、実際には、説明のためにドキュメントのどこを見ればよいかを示しています。

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エントリ(ドキュメントエントリを展開するには、必ず左側の|>矢印をクリックしてください)。

于 2012-11-12T05:42:55.230 に答える
1

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
} 

ScalaDocsへのリンク

于 2017-12-17T21:59:32.143 に答える
1

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
于 2021-01-22T18:22:30.797 に答える