parameter name method generic scala implicit-conversion scala-collections scala-option

scala - name - ¿Por qué la opción no extiende el rasgo iterable directamente?



scala by name parameter (1)

Option se puede convertir implícitamente a un Iterable , pero ¿por qué no se limita a implementar Iterable directamente?

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 }

EDITAR: De hecho, es incluso más extraño que eso porque en 2.8 Option declara un método iterator :

def iterator: Iterator[A] = if (isEmpty) Iterator.empty else Iterator.single(this.get)


Estoy pensando que había demasiados métodos sin sentido que serían necesarios. Por ejemplo, ¿cuál esperaría que fuera el valor de retorno para:

Some(1) ++ Some(2)

Actualmente, se compila y evalúa a la Lista (1,2) a través de los implícitos en 2.8, pero parece extraño.

Tal vez es por eso que el doc comenta en 2.7 decir:

Only potentially unbounded collections should directly sub-class Iterable

Edición: como se muestra en el comentario de @ MattR a continuación, dejar de lado la recomendación doc-comment para sub-tipo Collection es potencialmente engañoso. Y considerando que se transforma esta pregunta en "¿Por qué Option no extiende el rasgo de la Colección?"