¿Por qué opción se extiende el rasgo Iterable directamente?
-
25-09-2019 - |
Pregunta
Option
es convertir implícitamente a un Iterable
- pero ¿por qué no sólo acaba de poner en práctica 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
}
EDIT: De hecho, es incluso Weider que eso, porque en el 2,8 Option
no declarar un método iterator
def iterator: Iterator[A] =
if (isEmpty) Iterator.empty else Iterator.single(this.get)
Solución
Estoy pensando que había demasiados métodos no sin sentido que serían necesarios. Por ejemplo, ¿qué se espera que el valor de retorno sea para:
Some(1) ++ Some(2)
Esto compila actualmente y se evalúa en la lista (1,2) a través implícitos en 2.8, pero parece extraño.
Tal vez es por eso que los comentarios de documentación en 2.7 por ejemplo:
Only potentially unbounded collections should directly sub-class Iterable
Editar Como se muestra en el comentario de @ MattR abajo, dejándome el doc-comentario recomendación al subtipo Collection se puede inducir a error. Y teniendo en cuenta que esta pregunta se transforma en "¿Por qué opción se extiende la Colección rasgo?"