2010-08-29 27 views

Répondre

22

Les outils de base pour d'atteindre polymorphisme statiquement checkable à Scala sont

  • Le sous-typage (polymorphism OO bog standard)
  • paramétrisation Type (permet la variance polymorphes et contraintes)
  • auto-frappe (permet la restriction et la spécialisation du polymorphisme OO)
  • Conversion implicite (permet une construction polymorphe post-facto)
  • Typage structurel (permet poly morphisme en fonction des caractéristiques, plutôt que le type)
  • bornes de type général (permettant des contraintes très précises sur le polymorphisme permis)
  • de correspondance de motifs (permet le polymorphisme basé sur la structure de données, similaire à des types de données abstraites)
  • types supérieur-kinded (permettant le polymorphisme sur les constructions polymorphes)

Appeler toutes ces 'alternatives' est probablement le mauvais mot, car elles sont si bien intégrées. Il n'est pas rare que certains algorithmes polymorphes soient exprimés en utilisant conjointement plusieurs de ces outils.

Il est également intéressant de noter la place de for-comprehensions dans le polymorphisme Scala. Pour les compréhensions ne semblent pas particulièrement polymorphes. Au-dessous de la surface, les compréhensions ne sont que du sucre syntaxique pour les appels à filter/map/flatMap, et les implémentations de ces méthodes ont tendance à être fortement polymorphes. Ainsi, ce qui semble être des boucles de foration relativement simples peut entraîner des effets polymorphiques vraiment impressionnants.

+3

Il est probablement plus exact de décrire le typage structurel comme "basé sur les caractéristiques de la valeur" que sur "comportement [de la valeur]", puisque le comportement est une propriété opaque du point de vue du système de type. –

+2

La "prise en charge des types à caractères plus élevés" dans votre liste est l'une des fonctionnalités les plus puissantes de Scala. Je pense que la meilleure référence est toujours l'article d'Adrian Moors: http://people.cs.kuleuven.be/~adriaan.moors/files/higher.pdf – Landei

+1

D'excellents commentaires. Modification –