Por ejemplo, List[T] forSome { type T }
es equivalente a List[_]
, pero ¿esto es cierto para cada uso posible de forSome
o hay casos en los que forSome
no pueden ser reemplazados por un equivalente de la segunda sintaxis?¿Se pueden reemplazar todos los usos de `forSome` por un uso equivalente de` _`?
Respuesta
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
_
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 }
¿Cuál es la diferencia entre F [G [A]] para Algún {tipo A} y F [G [A] para Algún {tipo A}]? – user482745
- 1. Reemplazar todos los caracteres acentuados por su látex equivalente
- 2. ¿No se pueden reemplazar todos o la mayoría de los casos de `cada uno 'por` mapa`?
- 3. ¿Se pueden reemplazar todos los bucles 'for' por una instrucción LINQ?
- 4. Reemplazar todos los puntos en un número
- 5. Cómo desactivar ReSharper "Buscar todos los usos"
- 6. Reemplazar el uso de una clase en un proyecto específico
- 7. ¿Se pueden expresar todos los algoritmos iterativos recursivamente?
- 8. ¿Cuáles son todos los usos de '@' en C#?
- 9. Encuentre todos los usos de un método (incluso a través de la interfaz) usando NDepend
- 10. RegEx para reemplazar todos los caracteres, excepto los números
- 11. Reemplazar todos los 0 valores a NA
- 12. Flex: reemplazar todos los espacios con comas
- 13. javascript reemplazar selección todos los navegadores
- 14. Reemplazar todos los elementos en Knockout.js observableArray
- 15. Matlab: cómo reemplazar todos los caracteres especiales en un vector?
- 16. Cómo reemplazar todos los caracteres en una cadena usando JavaScript para este caso específico: reemplazar. por
- 17. ¿Pueden los memcached hacer un uso completo de multi-core?
- 18. ¿Cómo se pueden deseleccionar todos los elementos de un cuadro de lista usando jquery
- 19. Reemplazar todos los campos en MySQL
- 20. Explorando los usos de subs anónimos
- 21. ¿Por qué no se pueden sincronizar los constructores de Java?
- 22. ¿Por qué los nombres de usuario no se pueden cambiar?
- 23. ¿Se pueden adivinar los id de MongoDB?
- 24. ¿Por qué se eliminan todos los NUL de mi script?
- 25. ¿Cómo se puede seguir confiablemente los usos de CSS?
- 26. ¿Cuáles son los usos de svn copy?
- 27. ¿Debería uno reemplazar el uso addJSONData de jqGrid por el uso de setGridParam() y trigger ('reloadGrid')?
- 28. Reemplazar todos los espacios que están dentro de llaves
- 29. ¿Cómo se pueden acortar los ID de mongo para un mejor uso en las URL?
- 30. Rendimiento de rendimiento dentro de los usos
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 –
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
Reparado a lo largo de las líneas sugeridas por el retrónimo –