2010-08-29 38 views

Respuesta

22

Las herramientas básicas para el de lograr polimorfismo estáticamente comprobable en Scala son

  • Subtipificación (BOG-estándar polimorfismo OO)
  • Tipo de parametrización (permite la variación polimórfica y limitaciones)
  • Auto-tipificación (permite la restricción y especialización del polimorfismo de OO)
  • Conversión implícita (permite la construcción polimórfica posfacto)
  • Mecanografía estructural (permite poli morfismo basado en características, en lugar de tipo)
  • límites tipo general (permitiendo limitaciones extremadamente precisas sobre polimorfismo permitido)
  • patrón de coincidencia (permite polimorfismo basado en la estructura de datos, similar a los tipos de datos abstractos) tipos kinded-Superior
  • (permitiendo polimorfismo sobre construcciones polimórficas)

Llamar a todas estas 'alternativas' es probablemente la palabra incorrecta, ya que están muy bien integradas. No es raro que algunos algoritmos polimórficos se expresen mediante el uso de varias de estas herramientas en conjunto.

También vale la pena señalar el lugar de las comprensiones en el polimorfismo de Scala. Porque las comprensiones no parecen particularmente polimórficas. Debajo de la superficie, las comprensiones son solo azúcar sintáctico para llamadas a filter/map/flatMap, y las implementaciones de esos métodos tienden a ser altamente polimórficas. Por lo tanto, lo que parece ser comparativamente simple para bucles puede dar lugar a algunos efectos polimórficos realmente impresionantes.

+3

Probablemente sea más exacto describir el tipado estructural como "basado en características del valor" que en "comportamiento [del valor]", ya que el comportamiento es una propiedad opaca desde la perspectiva del sistema de tipos. –

+2

Extraño el "soporte para tipos de personas de mayor nivel" en su lista, que es una de las características más poderosas de Scala. Creo que la mejor referencia sigue siendo el artículo de Adrian Moors: http://people.cs.kuleuven.be/~adriaan.moors/files/higher.pdf – Landei

+1

Excelentes comentarios. Edición. –

Cuestiones relacionadas