Наблюдение последовательности как назначения от целых чисел к элементам является лишь одним из способов описания последовательности. Есть и другие способы, и нет причин, по которым такой способ описания последовательности должен стать каноническим. Фактическая цель последовательности состоит в том, чтобы сделать кучу элементов доступными и доступными. Последовательность не требуется для фактического назначения целочисленных чисел элементам. Например, большинство реализаций Stream
, вероятно, не имеют счетчика, идущего параллельно обходу. Требование, которое наложило бы ненужные накладные расходы на реализацию.
Кроме того, Map[K,V]
также является Iterable[(K,V)]
. Следуя вашему предложению, Seq[A]
также должен был быть Map[Int,A]
, который также сделает его Iterable[(Int,A)]
. Так как Seq
простирается Iterable
, это сделало бы Seq[A]
как в Iterable[A]
и Iterable[(Int,A)]
(и, рекурсивно, в Iterable[(Int,(Int,A))]
, Iterable[(Int,(Int,(Int,A)))]
, и так далее), который не является допустимым способом наследования в Scala.
Вы можете построить аналогичный аргумент для своего предложения относительно Set
.
'Set' и' Seq' имеют очень разную семантику от 'Map', поэтому было бы нецелесообразно раскрывать их таким образом. – Gabe
@Gabe, не могли бы вы привести конкретный пример того, что вы подразумеваете под «другой семантикой»? – Adam
Я думаю, что это интересный вопрос, но ответ Мадока является диспозитивным. – Malvolio