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)
Я думаю, что потребуется слишком много бессмысленных методов. Например, что вы ожидаете от возвращаемого значения:
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?»