Vedere una sequenza come un compito da interi a elementi è solo un modo per descrivere cos'è una sequenza. Ci sono altri modi, e non c'è motivo per cui quel modo di descrivere una sequenza debba diventare canonico. Lo scopo reale di una sequenza è quello di rendere un gruppo di elementi accessibili e attraversabili. Non è richiesta una sequenza per assegnare effettivamente numeri interi agli elementi. Ad esempio, la maggior parte delle implementazioni di Stream
probabilmente non ha un contatore in esecuzione in parallelo al traversal. Richiedere ciò imporrebbe un inutile sovraccarico all'implementazione.
Inoltre, uno Map[K,V]
è anche un Iterable[(K,V)]
. Seguendo il tuo suggerimento, un Seq[A]
dovrebbe anche essere un Map[Int,A]
, che sarebbe anche un Iterable[(Int,A)]
. Poiché Seq
estende Iterable
, questo renderebbe il Seq[A]
sia un Iterable[A]
ed un Iterable[(Int,A)]
(e, ricorsivamente, un Iterable[(Int,(Int,A))]
, Iterable[(Int,(Int,(Int,A)))]
, e così via), che non è un modo permesso di ereditarietà in Scala.
È possibile creare un argomento simile per il suggerimento relativo a Set
.
'Set' e' Seq' hanno una semantica molto diversa da 'Mappa', quindi non avrebbe senso esporli in questo modo. – Gabe
@Gabe, potresti fornire un esempio specifico di cosa intendi per "semantica diversa"? – Adam
Penso che questa sia una domanda interessante, ma la risposta di Madoc è dispositive. – Malvolio