La suite example de Un tour de Scala montre comment implicite peut être utilisé pour fournir les membres manquants appropriés (ajouter et unité) en fonction du type. Le compilateur choisira le bon objet implicite dans la portée. La bibliothèque utilise également cela avec List.sortBy
et Ordering
ou List.sum
et Numeric
par exemple.Utilisations valides des paramètres implicites
est cependant l'utilisation suivante en classe B une utilisation valide/recommandée des paramètres implicites (par opposition à ne pas utiliser implicite dans la classe A):
class I
class A {
def foo(i:I) { bar(i) }
def bar(i:I) { baz(i) }
def baz(i:I) { println("A baz " + i) }
}
(new A).foo(new I)
class B {
def foo(implicit i:I) { bar }
def bar(implicit i:I) { baz }
def baz(implicit i:I) { println("B baz " + i) }
}
(new B).foo(new I)
Là où je l'utilise principalement l'implicite pour me sauver de la frappe sur le site d'appel lors du passage d'un paramètre le long de la pile.
Bien que valide selon les règles de la langue, personnellement, je ne voudrais pas utiliser implicits pour ces situations. Je les utiliserais pour: 1) Modifier le comportement d'une méthode en fonction de l'environnement appelant. 2) Imposer une exigence sur l'appel qui dépend du paramètre de type de la classe qui l'entoure ou de la méthode elle-même. Mais, c'est juste mon point de vue personnel quand et comment ils devraient être utilisés. Peut-être existe-t-il d'autres modèles valides et utiles. – axel22