2010-08-29 14 views

risposta

22

Gli strumenti di base per conseguire il polimorfismo statico-controllabile in Scala sono

  • Sottotipizzazione (bog-standard OO polimorfismo)
  • Tipo parametrizzazione (permette varianza polimorfica e vincoli)
  • Self-tipizzazione (consente la restrizione e la specializzazione del polimorfismo OO)
  • Conversione implicita (consente costruzione polimorfica post-facto)
  • Digitazione strutturale (consente poly morphism sulla base di caratteristiche, piuttosto che tipo)
  • tipo limiti generali (permettendo vincoli estremamente precise su polimorfismo permesso)
  • pattern matching (permette polimorfismo sulla base di struttura di dati, simili ai tipi di dati astratti) tipi
  • Higher-kinded (permettendo polimorfismo su costruzioni polimorfiche)

Chiamare tutte queste "alternative" è probabilmente la parola sbagliata, dal momento che sono così ben integrate. Non è raro che alcuni algoritmi polimorfici vengano espressi utilizzando diversi di questi strumenti insieme.

Vale anche la pena di notare il posto delle incomprensioni nel polimorfismo di Scala. Per le comprensioni non sembra particolarmente polimorfico. Sotto la superficie, le incomprensioni sono solo zucchero sintattico per le chiamate a filtro/mappa/flatMap e le implementazioni di questi metodi tendono ad essere altamente polimorfiche. Pertanto, ciò che sembra essere relativamente semplice per i loop può provocare effetti polimorfici davvero impressionanti.

+3

Probabilmente è più accurato descrivere la tipizzazione strutturale come "basata sulle caratteristiche del valore" rispetto a "comportamento [del valore]", poiché il comportamento è una proprietà opaca dal punto di vista del sistema di tipi. –

+2

Mi manca il "supporto per i tipi più elevati" nella tua lista, che è una delle caratteristiche più potenti di Scala. Penso che il miglior riferimento sia ancora il lavoro di Adrian Moors: http://people.cs.kuleuven.be/~adriaan.moors/files/higher.pdf – Landei

+1

Commenti eccellenti. La modifica. –

Problemi correlati