Domanda

Option è implicitamente convertibile in una Iterable - ma perché non è solo solo implementare direttamente Iterable:

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
}

Modifica In realtà è ancora Weider di quello, perché in 2.8 Option non dichiarare un metodo di iterator :

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

Soluzione

Sto pensando che ci fossero troppi metodi non senza senso che sarebbero richiesti. Per esempio, che cosa si aspetta il valore di ritorno per essere in:

Some(1) ++ Some(2)

Questa compila attualmente e restituisce List (1,2) tramite impliciti in 2.8, ma sembra strano.

Forse è per questo che i commenti di documentazione a 2,7 diciamo:

Only potentially unbounded collections should directly sub-class Iterable

Modifica Come mostrato nella @ commento di mattr seguito, lasciandomi il doc-commento raccomandazione di sottotipo Collection è potenzialmente fuorviante. E considerando che trasforma questa domanda in "Perché Opzione non estendere la raccolta tratto?"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top