He visto "<:" y ">:" y "<%" etc., ¿alguien puede dar (o localizar) una buena descripción de estos? ¿Cuáles son las posibles limitaciones? ¿Qué hacen? ¿Cuál es un ejemplo de cuándo usarlas?Identificar y describir las restricciones de tipo genérico de Scala
Respuesta
S <: T
significa que S
es un subtipo de T
. Esto también se llama upper type bound. Del mismo modo, S >: T
significa que S
es un supertipo de T
, un lower type bound.
S <% T
es una vista atado, y expresa que S
debe venir equipado con un view que mapea sus valores en valores de tipo T
.
También es confuso para mí, y tengo una maestría en lenguajes de programación de Berkeley.
Hay dos animales distintos, aunque están todos conocen como "límites" y no "limitaciones" ...
primeros son los límites del tipo:
<:
- Tipo uppper encuadernados>:
- tipo límite inferior
Estos son esencialmente los mismos que super
y extends
en Java, y realmente será codificado como tal en el código de bytes generado, lo cual es bueno para la interoperabilidad :)
Luego viene el azúcar sintáctico:
<%
- vista con destino:
- cota contexto
Estos no están codificados de manera que Java podría entender (a pesar de que están representados en la firma Scala, una anotación que sc Ala añade a todas las clases para ayudar a que el compilador y que en última instancia sería la base de una biblioteca de reflexión Scala)
Ambos se convierten en parámetros implícitos:
def fn[A <% B](arg: A) = ... //sugared
def fn[A](arg: A)(implicit ev: A => B) = ... //unsugared
def fn[A : Numeric](arg: A) = ... //sugared
def fn[A](arg: A)(implicit ev: Numeric[A]) = ... //unsugared
Por esta razón, se puede' t combine sus propios implicits con límites de vista o límites de contexto, ya que Scala solo permite que un bloque etiquetado como implícito para cualquier función o constructor.
Si necesita utilizar sus propios implicits, primero debe convertir manualmente dichos límites a la versión no apareada y agregar esto al bloque implícito.
- 1. restricciones variables de tipo genérico e interfaces
- 2. Scala restricciones de tipo no permite nulos
- 3. Genérico recoger por tipo de Scala
- 4. Cómo evitar limitaciones en restricciones de tipo genérico en C#?
- 5. ¿Cómo especifico varias restricciones en un tipo genérico en C#?
- 6. Cómo funcionan las restricciones genéricas scala a tipos anulables
- 7. ¿Por qué no se permite que las clases selladas sean restricciones de tipo genérico?
- 8. Tipo genérico y rendimiento
- 9. Método genérico con múltiples restricciones
- 10. Crear instancia de tipo genérico?
- 11. Scala: Restricción en el tipo de clase genérico
- 12. Reflexión sobre restricciones de tipo
- 13. método genérico Scala anulando
- 14. Conversión de tipo genérico
- 15. Escriba restricciones en todas las instancias familiares de tipo
- 16. ¿Cuál es la diferencia entre un tipo genérico y una definición de tipo genérico?
- 17. Variable de tipo ambiguo `a0 'en las restricciones
- 18. Igualdad en las restricciones
- 19. Java Variables de tipo genérico
- 20. parámetros de tipo genérico circular
- 21. ¿Cómo especifico múltiples restricciones de tipo genérico en un único método?
- 22. Supertipo genérico de objeto complementario en Scala
- 23. ¿Cómo escribo un método de extensión para un tipo genérico con restricciones en los parámetros de tipo?
- 24. Conversión de tipo implícita de Scala y ==
- 25. genéricos fundición y el tipo genérico
- 26. clase genérica y la interacción restricciones de tipo nivel Método
- 27. Restricciones de plantilla C++
- 28. Scala Tipo de retorno
- 29. Restricciones de MySQL y verificación
- 30. Java argumentos de tipo genérico
Me gusta esta interpretación http://stackoverflow.com/questions/2982276/what-is-a-context-bound-in-scala/2983376#2983376 – huynhjl
posible duplicado de [¿Qué es el contexto de Scala y ver los límites?] (http://stackoverflow.com/questions/4465948/what-are-scala-context-and-view-bounds) – Suma
Ver [O'Reilly's _Programming Scala_] (http://ofps.oreilly.com/titles/9780596155957 /index.html). Comience en [Type Bounds] (http://ofps.oreilly.com/titles/9780596155957/ScalasTypeSystem.html#TypeBounds).Creo que hace un buen trabajo explicando los límites de tipo y vista. –