Pas vraiment possible comme vous le dites, mais vous pouvez le faire en utilisant le modèle de classe de type. Par exemple, à partir here:
sealed abstract class Acceptable[T]
object Acceptable {
implicit object IntOk extends Acceptable[Int]
implicit object LongOk extends Acceptable[Long]
}
def f[T: Acceptable](t: T) = t
scala> f(1)
res0: Int = 1
scala> f(1L)
res1: Long = 1
scala> f(1.0)
<console>:8: error: could not find implicit value for parameter ev: Acceptable[Double]
f(1.0)
^
EDIT
Cela fonctionne si classe et objets sont des compagnons. Sur REPL, si vous tapez chacun sur une ligne différente (par exemple, un "résultat" apparaît entre eux), ils ne sont pas des compagnons. Vous pouvez taper comme ci-dessous, cependant:
scala> sealed abstract class Acceptable[T]; object Acceptable {
| implicit object IntOk extends Acceptable[Int]
| implicit object LongOk extends Acceptable[Long]
| }
defined class Acceptable
defined module Acceptable
Merci, référence également http://ropas.snu.ac.kr/~bruno/papers/TypeClasses.pdf – oluies
@Brent Comme je l'ai dit par e-mail, il s'agit probablement d'un typage de la classe d'un objet sur des lignes différentes. Voir ma modification. –