Вопрос

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
}

РЕДАКТИРОВАТЬ: На самом деле это даже Weider, чем это, потому что в 2.8 Option делает объявление А.Н. iterator метод:

def iterator: Iterator[A] = 
  if (isEmpty) Iterator.empty else Iterator.single(this.get)
Это было полезно?

Решение

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

Some(1) ++ Some(2)

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

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

Only potentially unbounded collections should directly sub-class Iterable

Редактировать: Как показано в комментарии @ Mattr ниже, я оставив рекомендацию док-комментария к коллекции суб-типа, потенциально вводит в заблуждение. И учитывая это Морфы этот вопрос в «Почему вариант не расширяет сборную черту?»

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top