2013-04-14 8 views
5

Ho una domanda sulla progettazione del tipo. Perché Int non estende il tratto ordinato. Int non è ordinato dalla natura?Perché Int non eredita/estende da Ordinato [Int]

Invece, la libreria di scala fornisce metodi impliciti di 'ordine' che convertono Int in Ordinato [Int]. Quali sono le scelte progettuali fatte qui?

esempio tratto dal libro di programmazione a Scala

def maxListImpParm[T <% Ordered[T]](elements:List[T]):T= ... 


maxListImpParm(List(1,5,10,3)) // works because of implicit methods 
+0

La dichiarazione può essere abbreviata in: 'def maxListImpParm [T <% ordinato [T]] (elementi: Elenco [T]): T = ???' –

risposta

7

Perché Int (e alcune altre classi ereditate da AnyVal) è effimero - in fase di esecuzione è di solito rappresentato dal valore di base che non ha alcuna nozione di classe (e quindi ereditarietà). Naturalmente, ci sono delle eccezioni, come il boxing Int all'istanza della classe di riferimento in piena regola quando si mette l'elemento in collezione, ma la classe di tipizzazione fornisce una soluzione universale. Inoltre, i typeclasses sono more flexible than inheritance.