2011-03-21 15 views
9

dar los siguientes métodos:¿Cuándo usar el tipo existencial en Scala?

def beCool[T <: S](args:Array[T]) = {} 
def beCool(args:Array[T forSome {type T <:S}]) = {} 

¿Son equivalentes? ¿Me puede dar algunos ejemplos cuando debería preferir cuál?

+2

http: //scalada.blogspot .com/2008/01/existenntial-types.html –

Respuesta

3

Necesitarás la primera, creo, cada vez que necesites acceso a T. El ejemplo más simple se vuelve un elemento de argumentos:

def beCool(args: Array[T forSome { type T }]): T = args.head // --> not found: type T 
def beCool[T](args: Array[T]): T = args.head // ok 

la inexistencia de un tipo accesible T en el primero de ellos es más evidente cuando se utiliza el comodín:

def beCool(args: Array[_ <: S]) = ??? 
Cuestiones relacionadas