0

La compilation d'un programme contenant un paramètre de type de preuve dans Scala (tel que T <:< U) peut provoquer un avertissement lorsque -Ywarn-unused est transmis au compilateur. En particulier dans le cas où le paramètre type evidence est utilisé pour vérifier une contrainte codée à l'aide de types fantômes, cet avertissement est susceptible de se produire.Exclure des paramètres de preuve de type d'analyse dans Scala lors de l'utilisation de -Ywarn

À titre d'exemple, la compilation du fichier ici: https://github.com/hseeberger/demo-phantom-types/blob/master/src/main/scala/de/heikoseeberger/demophantomtypes/Hacker.scala renvoie les éléments suivants:

# 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

Il est clair pour moi que le paramètre ev n'est pas réellement nécessaire à l'exécution, mais le paramètre est utile à la compilation temps. Est-il possible d'ordonner au compilateur d'ignorer ce cas, tout en augmentant l'avertissement pour les paramètres de fonction inutilisés dans d'autres contextes? Par exemple, je pense qu'indiquer au compilateur d'ignorer les paramètres implicites de la classe <:< ou =:= résoudrait ce problème, mais je ne suis pas sûr de savoir comment cela pourrait être accompli.

Répondre

1

Je me surprends souvent à ajouter cela à cause de deux -Ywarn-unused ou -Ywarn-value-discard:

package myproject 

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

vous permet de faire ev.unused dans le code explicitement « préciser » que la valeur ne va pas être utilisé ou est seulement là pour Effets secondaires. Vous êtes n'utilisant pas le champ de classe dans la définition, mais c'est correct pour -Ywarn-unused.


Votre autre option est d'utiliser silencer plug-in pour supprimer les avertissements pour ces quelques méthodes.