Option
es convertir implícitamente a un Iterable
- pero ¿por qué no sólo acaba de poner en práctica Iterable
directamente:¿Por qué la opción no extiende el rasgo 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
sí declara un método iterator
:
def iterator: Iterator[A] =
if (isEmpty) Iterator.empty else Iterator.single(this.get)
Siempre puede cambiar el código fuente y ver qué se rompe. :-) –
¡Bueno, 'isEmpty' necesitaría un modificador' override' para principiantes! Solo me preguntaba si era algo conceptual –
Supongo que es porque Option es una mónada y no una colección. Para mí tiene sentido que las colecciones sean iterables, pero una mónada no es una colección inmediata. Por cierto: no sé acerca de Scala 2.7, pero en 2.8 Option.iterator se implementa utilizando Iterator.empty e Iterator.single. –