2012-03-13 14 views

Respuesta

12

No, porque el contexto unido es en realidad una forma abreviada de un parámetro implícito adicional.

Por ejemplo:

def sort[A : Ordering](xs: Seq[A]) 

es una forma abreviada de

def sort[A](xs: Seq[A])(implicit ordering: Ordering[A]) 

y esto no se puede representar en una definición de tipo.

+0

Gracias. Esto tiene sentido. –

12

En lugar de tener un contexto vinculado directamente en la declaración de tipo, tendría que tener una declaración de valor por separado que represente el parámetro implícito mencionado por JPP.

El que define el tipo también tendrá que proporcionar la evidencia para el contexto unido:

trait Generic { 
    type U 
    implicit val ordering: Ordering[U] // evidence for U: Ordering 

    def max(u1: U, u2: U) = List(u1, u2).max 
} 

def concrete[T: Ordering] = new Generic { 
    type U = T 
    val ordering = implicitly[Ordering[T]] 
} 

assert(concrete[Int].max(1,3) == 3) 
+2

Esta debería ser la respuesta aceptada –

Cuestiones relacionadas