2012-02-25 6 views

Respuesta

15

No, no todos los usos se pueden convertir así. Algo como esto (gracias a retronym, a continuación, que debería estar recibiendo los upvotes en este caso)

def foo(xs: Map[T, T] forSome { type T}) 

El punto aquí es que puedo usar lo existencial en más de un lugar, pero es el mismo existencial. Obviamente, si usa comodines, se estaría refiriendo a diferentes existenciales

+0

En este ejemplo; no. Para ser sincero, no estoy 100% seguro de que sea una sintaxis válida y no haya tenido la oportunidad de verificarlo. Pero he visto ejemplos a lo largo de líneas similares –

+0

De hecho, acabo de probarlo con scala 2.9.1 y ** ¡no compila **! Podrías por favor arreglarlo, no puedo hacerlo por ti, nunca he usado/necesitado el constructo 'forSome'. – paradigmatic

+0

Reparado a lo largo de las líneas sugeridas por el retrónimo –

14

_ en este contexto es la "Sintaxis de marcador de posición para tipos existenciales", descrita en 3.2.10 del language specification.

El nombre se parece mucho a otro uso de _, "Sintaxis de marcador de posición para funciones anónimas". Esta abreviatura no se puede usar para todas las funciones. Por ejemplo:

(a: A) => f(g(a)) 
f(g(_: A)) // WRONG, this means f((a: A) => g(a)) 

podemos construir un ejemplo similar para los existenciales, que no puede ser representado _:

F[G[A]] forSome { type A } 
F[G[_]] // WRONG, this means F[G[A] forSome { type A }] 

Nota al margen: los existenciales son no la analógica de nivel de tipo de funciones a nivel de valor . Eso sería:

({type l[A] = F[G[A]])#l 

De hecho, es una lástima que Scala utiliza el subrayado de los existenciales, en lugar de las funciones de nivel tipo.

ACTUALIZACIÓN

Let me marco @oxbow_lakes 'respuesta de la misma manera:

(a: A) => h(a, a) 
h(_, _) // WRONG, this means (a, b) => f(a, b) 

H[A, A] forSome { type A } 
H[_, _] // WRONG, this means H[A, B] forSome { type A; type B } 
+0

¿Cuál es la diferencia entre F [G [A]] para Algún {tipo A} y F [G [A] para Algún {tipo A}]? – user482745

Cuestiones relacionadas