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)
¿Fue útil?

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?"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top