0

などの型エビデンスパラメータを含むプログラムをコンパイルすると、-Ywarn-unusedがコンパイラに渡されたときに警告が発生することがあります。特に、ファクトムタイプを使用してエンコードされた制約を検証するためにタイプ証拠パラメータが使用される場合、この警告が発生する可能性があります。ここでは、ファイルのコンパイル例として -Ywarn-unusedを使用する場合、Scalaでの解析からタイプ証拠パラメータを除外します。

、: https://github.com/hseeberger/demo-phantom-types/blob/master/src/main/scala/de/heikoseeberger/demophantomtypes/Hacker.scalaは、次の値を返します。

# scalac -Ywarn-unused Hacker.scala Hacker.scala:42: warning: parameter value ev in method hackOn is never used def hackOn(implicit ev: IsCaffeinated[S]): Hacker[State.Decaffeinated] = { ^ Hacker.scala:47: warning: parameter value ev in method drinkCoffee is never used def drinkCoffee(implicit ev: IsDecaffeinated[S]): Hacker[State.Caffeinated] = { ^ two warnings found

それはパラメータevは、実行時に実際には必要ありませんが、パラメータは、コンパイル時に有用であることを私には明らかです時間。このケースを無視するようにコンパイラに指示する方法はありますか?他のコン​​テキストでは使用されていない関数パラメータの警告は引き続き発生しますか?

たとえば、私は、<:<クラスまたは=:=クラスの暗黙的なパラメータを無視するようにコンパイラに指示すると、この問題は解決しますが、どのように達成できるかはわかりません。

答えて

1

私はしばしば自分自身が原因-Ywarn-unusedまたは-Ywarn-value-discardのいずれかのこれを追加見つける:

package myproject 

package object syntax { 
    implicit class IdOps[A](a: A) { 
    def unused: Unit =() 
    } 
} 

は、明示的に値を使用する予定がないことを「指定」するためのコードでev.unusedを行うことができますかのためにのみ存在し

副作用。あなたは で、定義内にのクラスフィールドを使用していませんが、それは -Ywarn-unusedでも問題ありません。


あなたの他のオプションは、これらのいくつかのメソッドのための警告を抑制するためにsilencerプラグインを使用することです。

関連する問題