Pergunta

Option é implicitamente conversível para um Iterable - mas por que isso não apenas implementa Iterable diretamente:

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: Na verdade, é até weider do que isso porque em 2.8 Option Declara um iterator método:

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

Solução

Estou pensando que havia muitos métodos não sensuais que seriam necessários. Por exemplo, para que você esperaria que o valor de retorno seja:

Some(1) ++ Some(2)

Atualmente, isso compila e avalia a lista (1,2) via Implicits em 2.8, mas parece estranho.

Talvez seja por isso que o Doc comenta no 2.7 Diga:

Only potentially unbounded collections should directly sub-class Iterable

Editar: Conforme mostrado no comentário de @mattr abaixo, deixando de fora a recomendação do comércio de documentos para a coleção do subtipo é potencialmente enganador. E considerando que ele se transforma em "Por que a opção não estende o traço de coleta?"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top