Почему Опция не расширяет Повторяемую черту непосредственно?

Option неявно конвертируемо к Iterable - но почему это просто просто не реализует Iterable непосредственно:

def iterator = new Iterator[A] {
  var end = !isDefined
  def next() = {
    val n = if (end) throw new NoSuchElementException() else get
    end = true
    n
  }

  def hasNext = !end
}

Править: На самом деле это - даже сварщик, чем это потому что в 2,8 Option действительно объявляет iterator метод:

def iterator: Iterator[A] = 
  if (isEmpty) Iterator.empty else Iterator.single(this.get)
17
задан giampaolo 13 February 2014 в 21:17
поделиться

1 ответ

Я думаю, что потребуется слишком много бессмысленных методов. Например, что вы ожидаете от возвращаемого значения:

Some(1) ++ Some(2)

В настоящее время он компилируется и оценивается в List (1,2) с помощью неявных выражений в 2.8, но кажется странным.

Может быть, поэтому в комментариях к документу 2.7 говорится:

Only potentially unbounded collections should directly sub-class Iterable

Изменить: Как показано в комментарии @ MattR ниже, я оставляю рекомендацию doc-comment для подтипа Collection, что потенциально вводит в заблуждение. Учитывая это, этот вопрос трансформируется в «Почему Option не расширяет свойство Collection?»

9
ответ дан 30 November 2019 в 14:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: